def test_set_property_validation_integer(self): output, returnVal = pcs( temp_cib, "property set default-resource-stickiness=0" ) ac(output, "") self.assertEqual(returnVal, 0) o, _ = pcs(temp_cib, "property list") ac(o, """Cluster Properties: default-resource-stickiness: 0 """ ) output, returnVal = pcs( temp_cib, "property set default-resource-stickiness=-10" ) ac(output, "") self.assertEqual(returnVal, 0) o, _ = pcs(temp_cib, "property list") ac(o, """Cluster Properties: default-resource-stickiness: -10 """ ) output, returnVal = pcs( temp_cib, "property set default-resource-stickiness=0 --force" ) ac(output, "") self.assertEqual(returnVal, 0) o, _ = pcs(temp_cib, "property list") ac(o, """Cluster Properties: default-resource-stickiness: 0 """ ) output, returnVal = pcs( temp_cib, "property set default-resource-stickiness=0.1" ) ac( output, "Error: invalid value of property: " "'default-resource-stickiness=0.1', (use --force to override)\n" ) self.assertEqual(returnVal, 1) o, _ = pcs(temp_cib, "property list") ac(o, """Cluster Properties: default-resource-stickiness: 0 """ ) output, returnVal = pcs( temp_cib, "property set default-resource-stickiness=0.1 --force" ) ac(output, "") self.assertEqual(returnVal, 0) o, _ = pcs(temp_cib, "property list") ac(o, """Cluster Properties: default-resource-stickiness: 0.1 """ )
def testNoStonithWarning(self): o, r = pcs(temp_cib, "status") assert "WARNING: no stonith devices and " in o o, r = pcs( temp_cib, "stonith create test_stonith fence_apc ipaddr=ip login=lgn, pcmk_host_argument=node1" ) ac(o, "") assert r == 0 o, r = pcs(temp_cib, "status") assert "WARNING: no stonith devices and " not in o self.assert_pcs_success("stonith delete test_stonith", "Deleting Resource - test_stonith\n") o, r = pcs( temp_cib, "stonith create test_stonith fence_apc ipaddr=ip login=lgn, pcmk_host_argument=node1" ) ac(o, "") assert r == 0 o, r = pcs(temp_cib, "status") assert "WARNING: no stonith devices and " not in o
def testPcmkHostAllowsMissingPort(self): # Test that port is not required when pcmk_host_argument or # pcmk_host_list or pcmk_host_map is specified # Port is temporarily an optional parameter. Once we are getting # metadata from pacemaker, this will be reviewed and fixed. output, returnVal = pcs( temp_cib, 'stonith create apc-1 fence_apc params ipaddr="ip" login="******"') # ac(output, """\ #Error: missing required option(s): 'port' for resource type: stonith:fence_apc (use --force to override) #""") # self.assertEquals(returnVal, 1) ac(output, "") self.assertEqual(returnVal, 0) output, returnVal = pcs( temp_cib, 'stonith create apc-2 fence_apc params ipaddr="ip" login="******" pcmk_host_map="buzz-01:1;buzz-02:2"' ) ac(output, "") self.assertEqual(returnVal, 0) output, returnVal = pcs( temp_cib, 'stonith create apc-3 fence_apc params ipaddr="ip" login="******" pcmk_host_list="buzz-01,buzz-02"' ) ac(output, "") self.assertEqual(returnVal, 0) output, returnVal = pcs( temp_cib, 'stonith create apc-4 fence_apc params ipaddr="ip" login="******" pcmk_host_argument="buzz-01"' ) ac(output, "") self.assertEqual(returnVal, 0)
def test_node_utilization_set_invalid(self): output, returnVal = pcs(temp_cib, "node utilization rh7-1 test") expected_out = """\ Error: missing value of 'test' option """ ac(expected_out, output) self.assertEqual(1, returnVal) output, returnVal = pcs(temp_cib, "node utilization rh7-1 =10") expected_out = """\ Error: missing key in '=10' option """ ac(expected_out, output) self.assertEqual(1, returnVal) output, returnVal = pcs(temp_cib, "node utilization rh7-0 test=10") expected_out = """\ Error: Unable to find a node: rh7-0 """ ac(expected_out, output) self.assertEqual(1, returnVal) output, returnVal = pcs( temp_cib, "node utilization rh7-1 test1=10 test=int" ) expected_out = """\ Error: Value of utilization attribute must be integer: 'test=int' """ ac(expected_out, output) self.assertEqual(1, returnVal)
def testStonithFenceConfirm(self): output, returnVal = pcs(temp_cib, "stonith fence blah blah") assert returnVal == 1 assert output == "Error: must specify one (and only one) node to fence\n" output, returnVal = pcs(temp_cib, "stonith confirm blah blah") assert returnVal == 1 assert output == "Error: must specify one (and only one) node to confirm fenced\n"
def testNodeStandby(self): # only basic test, standby subcommands were moved to 'pcs node' output, returnVal = pcs(temp_cib, "cluster standby rh7-1") ac(output, "") assert returnVal == 0 output, returnVal = pcs(temp_cib, "cluster unstandby rh7-1") ac(output, "") assert returnVal == 0
def test_set_property_validation_boolean(self): output, returnVal = pcs(temp_cib, "property set enable-acl=TRUE") ac(output, "") self.assertEqual(returnVal, 0) o, _ = pcs(temp_cib, "property list") ac(o, """Cluster Properties: enable-acl: TRUE """ ) output, returnVal = pcs(temp_cib, "property set enable-acl=no") ac(output, "") self.assertEqual(returnVal, 0) o, _ = pcs(temp_cib, "property list") ac(o, """Cluster Properties: enable-acl: no """ ) output, returnVal = pcs( temp_cib, "property set enable-acl=TRUE --force" ) ac(output, "") self.assertEqual(returnVal, 0) o, _ = pcs(temp_cib, "property list") ac(o, """Cluster Properties: enable-acl: TRUE """ ) output, returnVal = pcs( temp_cib, "property set enable-acl=not_valid_value" ) ac( output, "Error: invalid value of property: " "'enable-acl=not_valid_value', (use --force to override)\n" ) self.assertEqual(returnVal, 1) o, _ = pcs(temp_cib, "property list") ac(o, """Cluster Properties: enable-acl: TRUE """ ) output, returnVal = pcs( temp_cib, "property set enable-acl=not_valid_value --force" ) ac(output, "") self.assertEqual(returnVal, 0) o, _ = pcs(temp_cib, "property list") ac(o, """Cluster Properties: enable-acl: not_valid_value """ )
def testPcmkHostList(self): output, returnVal = pcs(temp_cib, "stonith create F1 fence_apc 'pcmk_host_list=nodea nodeb' --force") assert returnVal == 0 ac(output,"") output, returnVal = pcs(temp_cib, "stonith show F1") ac(output, """\ Resource: F1 (class=stonith type=fence_apc) Attributes: pcmk_host_list="nodea nodeb" Operations: monitor interval=60s (F1-monitor-interval-60s) """) assert returnVal == 0
def test_stonith_create_provides_unfencing_rhel6(self): if not utils.is_rhel6(): return output, returnVal = pcs( temp_cib, "stonith create f1 fence_mpath key=abc" ) ac(output, "") self.assertEqual(0, returnVal) output, returnVal = pcs( temp_cib, "stonith create f2 fence_mpath key=abc meta provides=unfencing" ) ac(output, "") self.assertEqual(0, returnVal) output, returnVal = pcs( temp_cib, "stonith create f3 fence_mpath key=abc meta provides=something" ) ac(output, "") self.assertEqual(0, returnVal) output, returnVal = pcs( temp_cib, "stonith create f4 fence_xvm meta provides=something" ) ac(output, "") self.assertEqual(0, returnVal) output, returnVal = pcs(temp_cib, "stonith show --full") ac(output, """\ Resource: f1 (class=stonith type=fence_mpath) Attributes: key=abc Meta Attrs: provides=unfencing Operations: monitor interval=60s (f1-monitor-interval-60s) Resource: f2 (class=stonith type=fence_mpath) Attributes: key=abc Meta Attrs: provides=unfencing Operations: monitor interval=60s (f2-monitor-interval-60s) Resource: f3 (class=stonith type=fence_mpath) Attributes: key=abc Meta Attrs: provides=unfencing Operations: monitor interval=60s (f3-monitor-interval-60s) Resource: f4 (class=stonith type=fence_xvm) Meta Attrs: provides=something Operations: monitor interval=60s (f4-monitor-interval-60s) """) self.assertEqual(0, returnVal)
def testPcmkHostList(self): output, returnVal = pcs( temp_cib, "stonith create F1 fence_apc 'pcmk_host_list=nodea nodeb' --force") assert returnVal == 0 ac(output, "") output, returnVal = pcs(temp_cib, "stonith show F1") ac( output, """\ Resource: F1 (class=stonith type=fence_apc) Attributes: pcmk_host_list="nodea nodeb" Operations: monitor interval=60s (F1-monitor-interval-60s) """) assert returnVal == 0
def test_node_add_rhel6_missing_fence_pcmk(self): if not utils.is_rhel6(): return # chnage the fence device name to a value different that set by pcs with open(cluster_conf_file, "r") as f: data = f.read() data = data.replace('agent="fence_pcmk"', 'agent="fence_whatever"') with open(cluster_conf_tmp, "w") as f: f.write(data) # test a node is added correctly and uses the fence device output, returnVal = pcs( temp_cib, "cluster localnode add --cluster_conf={0} rh7-3.localhost" .format(cluster_conf_tmp) ) ac(output, "rh7-3.localhost: successfully added!\n") self.assertEqual(returnVal, 0) with open(cluster_conf_tmp) as f: data = f.read() ac(data, """\ <cluster config_version="14" name="test99"> <fence_daemon/> <clusternodes> <clusternode name="rh7-1" nodeid="1"> <fence> <method name="pcmk-method"> <device name="pcmk-redirect" port="rh7-1"/> </method> </fence> </clusternode> <clusternode name="rh7-2" nodeid="2"> <fence> <method name="pcmk-method"> <device name="pcmk-redirect" port="rh7-2"/> </method> </fence> </clusternode> <clusternode name="rh7-3.localhost" nodeid="3"> <fence> <method name="pcmk-method"> <device name="pcmk-redirect-1" port="rh7-3.localhost"/> </method> </fence> </clusternode> </clusternodes> <cman broadcast="no" transport="udpu"/> <fencedevices> <fencedevice agent="fence_whatever" name="pcmk-redirect"/> <fencedevice agent="fence_pcmk" name="pcmk-redirect-1"/> </fencedevices> <rm> <failoverdomains/> <resources/> </rm> </cluster> """)
def test_node_utilization_set(self): output, returnVal = pcs(temp_cib, "node utilization rh7-1 test1=10") ac("", output) self.assertEqual(0, returnVal) output, returnVal = pcs(temp_cib, "node utilization rh7-2") expected_out = """\ Node Utilization: rh7-2: \n""" ac(expected_out, output) self.assertEqual(0, returnVal) output, returnVal = pcs(temp_cib, "node utilization rh7-1") expected_out = """\ Node Utilization: rh7-1: test1=10 """ ac(expected_out, output) self.assertEqual(0, returnVal) output, returnVal = pcs( temp_cib, "node utilization rh7-1 test1=-10 test4=1234" ) ac("", output) self.assertEqual(0, returnVal) output, returnVal = pcs(temp_cib, "node utilization rh7-1") expected_out = """\ Node Utilization: rh7-1: test1=-10 test4=1234 """ ac(expected_out, output) self.assertEqual(0, returnVal) output, returnVal = pcs( temp_cib, "node utilization rh7-2 test2=321 empty=" ) ac("", output) self.assertEqual(0, returnVal) output, returnVal = pcs(temp_cib, "node utilization rh7-2") expected_out = """\ Node Utilization: rh7-2: test2=321 """ ac(expected_out, output) self.assertEqual(0, returnVal) output, returnVal = pcs(temp_cib, "node utilization") expected_out = """\ Node Utilization: rh7-1: test1=-10 test4=1234 rh7-2: test2=321 """ ac(expected_out, output) self.assertEqual(0, returnVal)
def test_set_property_validation_integer(self): output, returnVal = pcs(temp_cib, "property set migration-limit=0") ac(output, "") self.assertEqual(returnVal, 0) o, _ = pcs(temp_cib, "property list") ac(o, """Cluster Properties: migration-limit: 0 """) output, returnVal = pcs(temp_cib, "property set migration-limit=-10") ac(output, "") self.assertEqual(returnVal, 0) o, _ = pcs(temp_cib, "property list") ac(o, """Cluster Properties: migration-limit: -10 """) output, returnVal = pcs(temp_cib, "property set migration-limit=0 --force") ac(output, "") self.assertEqual(returnVal, 0) o, _ = pcs(temp_cib, "property list") ac(o, """Cluster Properties: migration-limit: 0 """) output, returnVal = pcs(temp_cib, "property set migration-limit=0.1") ac( output, "Error: invalid value of property: " "'migration-limit=0.1', (use --force to override)\n") self.assertEqual(returnVal, 1) o, _ = pcs(temp_cib, "property list") ac(o, """Cluster Properties: migration-limit: 0 """) output, returnVal = pcs(temp_cib, "property set migration-limit=0.1 --force") ac(output, "") self.assertEqual(returnVal, 0) o, _ = pcs(temp_cib, "property list") ac(o, """Cluster Properties: migration-limit: 0.1 """)
def testClusterUpgrade(self): with open(temp_cib) as myfile: data = myfile.read() assert data.find("pacemaker-1.2") != -1 assert data.find("pacemaker-2.") == -1 o,r = pcs(temp_cib, "cluster cib-upgrade") ac(o,"Cluster CIB has been upgraded to latest version\n") assert r == 0 with open(temp_cib) as myfile: data = myfile.read() assert data.find("pacemaker-1.2") == -1 assert data.find("pacemaker-2.") == -1 assert data.find("pacemaker-3.") != -1 o,r = pcs(temp_cib, "cluster cib-upgrade") ac(o,"Cluster CIB has been upgraded to latest version\n") assert r == 0
def test_dont_create_nvset_on_removal(self): # pcs does not actually do cib editing, it passes it to crm_node. So # this behaves differently than the rest of pcs - instead of doing # nothing it returns an error. # Should be changed to be consistent with the rest of pcs. output, retval = pcs(self.temp_cib, "node attribute rh7-1 test=") self.assertEqual( output, "Error: attribute: 'test' doesn't exist for node: 'rh7-1'\n") self.assertEqual(retval, 2)
def test_node_standby(self): output, returnVal = pcs(temp_cib, "node standby rh7-1") ac(output, "") self.assertEqual(returnVal, 0) # try to standby node which is already in standby mode output, returnVal = pcs(temp_cib, "node standby rh7-1") ac(output, "") self.assertEqual(returnVal, 0) output, returnVal = pcs(temp_cib, "node unstandby rh7-1") ac(output, "") self.assertEqual(returnVal, 0) # try to unstandby node which is no in standby mode output, returnVal = pcs(temp_cib, "node unstandby rh7-1") ac(output, "") self.assertEqual(returnVal, 0) output, returnVal = pcs(temp_cib, "node standby nonexistant-node") self.assertEqual( output, "Error: node 'nonexistant-node' does not appear to exist in configuration\n" ) self.assertEqual(returnVal, 1) output, returnVal = pcs(temp_cib, "node unstandby nonexistant-node") self.assertEqual( output, "Error: node 'nonexistant-node' does not appear to exist in configuration\n" ) self.assertEqual(returnVal, 1)
def testPcmkHostList(self): self.assert_pcs_success( "stonith create F1 fence_apc 'pcmk_host_list=nodea nodeb' --force", "Warning: required resource options 'ipaddr', 'login' are missing\n" ) output, returnVal = pcs(temp_cib, "stonith show F1") ac(output, """\ Resource: F1 (class=stonith type=fence_apc) Attributes: pcmk_host_list="nodea nodeb" Operations: monitor interval=60s (F1-monitor-interval-60s) """) assert returnVal == 0
def test_set_property_validation_enum(self): output, returnVal = pcs( temp_cib, "property set no-quorum-policy=freeze" ) ac(output, "") self.assertEqual(returnVal, 0) o, _ = pcs(temp_cib, "property list") ac(o, """Cluster Properties: no-quorum-policy: freeze """ ) output, returnVal = pcs( temp_cib, "property set no-quorum-policy=freeze --force" ) ac(output, "") self.assertEqual(returnVal, 0) o, _ = pcs(temp_cib, "property list") ac(o, """Cluster Properties: no-quorum-policy: freeze """ ) output, returnVal = pcs( temp_cib, "property set no-quorum-policy=not_valid_value" ) ac( output, "Error: invalid value of property: " "'no-quorum-policy=not_valid_value', (use --force to override)\n" ) self.assertEqual(returnVal, 1) o, _ = pcs(temp_cib, "property list") ac(o, """Cluster Properties: no-quorum-policy: freeze """ ) output, returnVal = pcs( temp_cib, "property set no-quorum-policy=not_valid_value --force" ) ac(output, "") self.assertEqual(returnVal, 0) o, _ = pcs(temp_cib, "property list") ac(o, """Cluster Properties: no-quorum-policy: not_valid_value """ )
def testPcmkHostAllowsMissingPort(self): # Test that port is not required when pcmk_host_argument or # pcmk_host_list or pcmk_host_map is specified # Port is temporarily an optional parameter. Once we are getting # metadata from pacemaker, this will be reviewed and fixed. output, returnVal = pcs( temp_cib, 'stonith create apc-1 fence_apc params ipaddr="ip" login="******"' ) # ac(output, """\ #Error: missing required option(s): 'port' for resource type: stonith:fence_apc (use --force to override) #""") # self.assertEquals(returnVal, 1) ac(output, "") self.assertEqual(returnVal, 0) output, returnVal = pcs( temp_cib, 'stonith create apc-2 fence_apc params ipaddr="ip" login="******" pcmk_host_map="buzz-01:1;buzz-02:2"' ) ac(output, "") self.assertEqual(returnVal, 0) output, returnVal = pcs( temp_cib, 'stonith create apc-3 fence_apc params ipaddr="ip" login="******" pcmk_host_list="buzz-01,buzz-02"' ) ac(output, "") self.assertEqual(returnVal, 0) output, returnVal = pcs( temp_cib, 'stonith create apc-4 fence_apc params ipaddr="ip" login="******" pcmk_host_argument="buzz-01"' ) ac(output, "") self.assertEqual(returnVal, 0)
def testDefaults(self): output, returnVal = pcs(temp_cib, "property --defaults") prop_defaults = output assert returnVal == 0, 'Unable to list resources' assert output.startswith('Cluster Properties:\n batch-limit') output, returnVal = pcs(temp_cib, "property --all") assert returnVal == 0, 'Unable to list resources' assert output.startswith('Cluster Properties:\n batch-limit') ac(output, prop_defaults) output, returnVal = pcs(temp_cib, "property set blahblah=blah") assert returnVal == 1 assert output == "Error: unknown cluster property: 'blahblah', (use --force to override)\n", [ output ] output, returnVal = pcs(temp_cib, "property set blahblah=blah --force") assert returnVal == 0, output assert output == "", output output, returnVal = pcs(temp_cib, "property set stonith-enabled=false") assert returnVal == 0, output assert output == "", output output, returnVal = pcs(temp_cib, "property") assert returnVal == 0 assert output == "Cluster Properties:\n blahblah: blah\n stonith-enabled: false\n", [ output ] output, returnVal = pcs(temp_cib, "property --defaults") assert returnVal == 0, 'Unable to list resources' assert output.startswith('Cluster Properties:\n batch-limit') ac(output, prop_defaults) output, returnVal = pcs(temp_cib, "property --all") assert returnVal == 0, 'Unable to list resources' assert "blahblah: blah" in output assert "stonith-enabled: false" in output assert output.startswith('Cluster Properties:\n batch-limit')
def testNoStonithWarning(self): o,r = pcs(temp_cib, "status") assert "WARNING: no stonith devices and " in o o,r = pcs(temp_cib, "stonith create test_stonith fence_apc ipaddr=ip login=lgn, pcmk_host_argument=node1") ac(o,"") assert r == 0 o,r = pcs(temp_cib, "status") assert "WARNING: no stonith devices and " not in o o,r = pcs(temp_cib, "stonith delete test_stonith") ac(o,"Deleting Resource - test_stonith\n") assert r == 0 o,r = pcs(temp_cib, "stonith create test_stonith fence_apc ipaddr=ip login=lgn, pcmk_host_argument=node1 --clone") ac(o,"") assert r == 0 o,r = pcs(temp_cib, "status") assert "WARNING: no stonith devices and " not in o
def testEnableDisable(self): o, r = pcs(temp_cib, "acl disable") assert r == 0 ac(o, "") o, r = pcs(temp_cib, "acl") assert r == 0 ac(o, "ACLs are disabled, run 'pcs acl enable' to enable\n\n") o, r = pcs(temp_cib, "acl enable") assert r == 0 ac(o, "") o, r = pcs(temp_cib, "acl") assert r == 0 ac(o, "ACLs are enabled\n\n") o, r = pcs(temp_cib, "acl disable") assert r == 0 ac(o, "") o, r = pcs(temp_cib, "acl") assert r == 0 ac(o, "ACLs are disabled, run 'pcs acl enable' to enable\n\n")
def testEnableDisable(self): o,r = pcs("acl disable") assert r == 0 ac(o,"") o,r = pcs("acl") assert r == 0 ac(o,"ACLs are disabled, run 'pcs acl enable' to enable\n\n") o,r = pcs("acl enable") assert r == 0 ac(o,"") o,r = pcs("acl") assert r == 0 ac(o,"ACLs are enabled\n\n") o,r = pcs("acl disable") assert r == 0 ac(o,"") o,r = pcs("acl") assert r == 0 ac(o,"ACLs are disabled, run 'pcs acl enable' to enable\n\n")
def testBadProperties(self): o, r = pcs(temp_cib, "property set xxxx=zzzz") self.assertEqual(r, 1) ac( o, "Error: unknown cluster property: 'xxxx', (use --force to override)\n" ) o, _ = pcs(temp_cib, "property list") ac(o, "Cluster Properties:\n") output, returnVal = pcs(temp_cib, "property set =5678 --force") ac(output, "Error: empty property name: '=5678'\n") self.assertEqual(returnVal, 1) o, _ = pcs(temp_cib, "property list") ac(o, "Cluster Properties:\n") output, returnVal = pcs(temp_cib, "property set =5678") ac(output, "Error: empty property name: '=5678'\n") self.assertEqual(returnVal, 1) o, _ = pcs(temp_cib, "property list") ac(o, "Cluster Properties:\n") output, returnVal = pcs(temp_cib, "property set bad_format") ac(output, "Error: invalid property format: 'bad_format'\n") self.assertEqual(returnVal, 1) o, _ = pcs(temp_cib, "property list") ac(o, "Cluster Properties:\n") output, returnVal = pcs(temp_cib, "property set bad_format --force") ac(output, "Error: invalid property format: 'bad_format'\n") self.assertEqual(returnVal, 1) o, _ = pcs(temp_cib, "property list") ac(o, "Cluster Properties:\n") o, r = pcs(temp_cib, "property unset zzzzz") self.assertEqual(r, 1) ac(o, "Error: can't remove property: 'zzzzz' that doesn't exist\n") o, _ = pcs(temp_cib, "property list") ac(o, "Cluster Properties:\n") o, r = pcs(temp_cib, "property unset zzzz --force") self.assertEqual(r, 0) ac(o, "") o, _ = pcs(temp_cib, "property list") ac(o, "Cluster Properties:\n")
def testStonithDeleteRemovesLevel(self): shutil.copy(rc("cib-empty-with3nodes.xml"), temp_cib) self.assert_pcs_success( "stonith create n1-ipmi fence_apc --force", "Warning: required stonith options 'ipaddr', 'login' are missing\n" ) self.assert_pcs_success( "stonith create n2-ipmi fence_apc --force", "Warning: required stonith options 'ipaddr', 'login' are missing\n" ) self.assert_pcs_success( "stonith create n1-apc1 fence_apc --force", "Warning: required stonith options 'ipaddr', 'login' are missing\n" ) self.assert_pcs_success( "stonith create n1-apc2 fence_apc --force", "Warning: required stonith options 'ipaddr', 'login' are missing\n" ) self.assert_pcs_success( "stonith create n2-apc1 fence_apc --force", "Warning: required stonith options 'ipaddr', 'login' are missing\n" ) self.assert_pcs_success( "stonith create n2-apc2 fence_apc --force", "Warning: required stonith options 'ipaddr', 'login' are missing\n" ) self.assert_pcs_success( "stonith create n2-apc3 fence_apc --force", "Warning: required stonith options 'ipaddr', 'login' are missing\n" ) self.assert_pcs_success_all([ "stonith level add 1 rh7-1 n1-ipmi", "stonith level add 2 rh7-1 n1-apc1,n1-apc2,n2-apc2", "stonith level add 1 rh7-2 n2-ipmi", "stonith level add 2 rh7-2 n2-apc1,n2-apc2,n2-apc3", ]) output, returnVal = pcs(temp_cib, "stonith") self.assertEqual(returnVal, 0) ac( output, """\ n1-ipmi\t(stonith:fence_apc):\tStopped n2-ipmi\t(stonith:fence_apc):\tStopped n1-apc1\t(stonith:fence_apc):\tStopped n1-apc2\t(stonith:fence_apc):\tStopped n2-apc1\t(stonith:fence_apc):\tStopped n2-apc2\t(stonith:fence_apc):\tStopped n2-apc3\t(stonith:fence_apc):\tStopped Target: rh7-1 Level 1 - n1-ipmi Level 2 - n1-apc1,n1-apc2,n2-apc2 Target: rh7-2 Level 1 - n2-ipmi Level 2 - n2-apc1,n2-apc2,n2-apc3 """) self.assert_pcs_success("stonith delete n2-apc2", "Deleting Resource - n2-apc2\n") output, returnVal = pcs(temp_cib, "stonith") self.assertEqual(returnVal, 0) ac( output, """\ n1-ipmi\t(stonith:fence_apc):\tStopped n2-ipmi\t(stonith:fence_apc):\tStopped n1-apc1\t(stonith:fence_apc):\tStopped n1-apc2\t(stonith:fence_apc):\tStopped n2-apc1\t(stonith:fence_apc):\tStopped n2-apc3\t(stonith:fence_apc):\tStopped Target: rh7-1 Level 1 - n1-ipmi Level 2 - n1-apc1,n1-apc2 Target: rh7-2 Level 1 - n2-ipmi Level 2 - n2-apc1,n2-apc3 """) self.assert_pcs_success("stonith delete n2-apc1", "Deleting Resource - n2-apc1\n") output, returnVal = pcs(temp_cib, "stonith") self.assertEqual(returnVal, 0) ac( output, """\ n1-ipmi\t(stonith:fence_apc):\tStopped n2-ipmi\t(stonith:fence_apc):\tStopped n1-apc1\t(stonith:fence_apc):\tStopped n1-apc2\t(stonith:fence_apc):\tStopped n2-apc3\t(stonith:fence_apc):\tStopped Target: rh7-1 Level 1 - n1-ipmi Level 2 - n1-apc1,n1-apc2 Target: rh7-2 Level 1 - n2-ipmi Level 2 - n2-apc3 """) self.assert_pcs_success("stonith delete n2-apc3", "Deleting Resource - n2-apc3\n") output, returnVal = pcs(temp_cib, "stonith") self.assertEqual(returnVal, 0) ac( output, """\ n1-ipmi\t(stonith:fence_apc):\tStopped n2-ipmi\t(stonith:fence_apc):\tStopped n1-apc1\t(stonith:fence_apc):\tStopped n1-apc2\t(stonith:fence_apc):\tStopped Target: rh7-1 Level 1 - n1-ipmi Level 2 - n1-apc1,n1-apc2 Target: rh7-2 Level 1 - n2-ipmi """) self.assert_pcs_success("resource delete n1-apc1", "Deleting Resource - n1-apc1\n") output, returnVal = pcs(temp_cib, "stonith") self.assertEqual(returnVal, 0) ac( output, """\ n1-ipmi\t(stonith:fence_apc):\tStopped n2-ipmi\t(stonith:fence_apc):\tStopped n1-apc2\t(stonith:fence_apc):\tStopped Target: rh7-1 Level 1 - n1-ipmi Level 2 - n1-apc2 Target: rh7-2 Level 1 - n2-ipmi """) self.assert_pcs_success( "resource delete n1-apc2", outdent("""\ Deleting Resource - n1-apc2 """)) output, returnVal = pcs(temp_cib, "stonith") self.assertEqual(returnVal, 0) ac( output, """\ n1-ipmi\t(stonith:fence_apc):\tStopped n2-ipmi\t(stonith:fence_apc):\tStopped Target: rh7-1 Level 1 - n1-ipmi Target: rh7-2 Level 1 - n2-ipmi """)
def testStonithDeleteRemovesLevel(self): shutil.copy(rc("cib-empty-with3nodes.xml"), temp_cib) output, returnVal = pcs(temp_cib, "stonith create n1-ipmi fence_ilo --force") self.assertEqual(returnVal, 0) ac(output, "") output, returnVal = pcs(temp_cib, "stonith create n2-ipmi fence_ilo --force") self.assertEqual(returnVal, 0) ac(output, "") output, returnVal = pcs(temp_cib, "stonith create n1-apc1 fence_apc --force") self.assertEqual(returnVal, 0) ac(output, "") output, returnVal = pcs(temp_cib, "stonith create n1-apc2 fence_apc --force") self.assertEqual(returnVal, 0) ac(output, "") output, returnVal = pcs(temp_cib, "stonith create n2-apc1 fence_apc --force") self.assertEqual(returnVal, 0) ac(output, "") output, returnVal = pcs(temp_cib, "stonith create n2-apc2 fence_apc --force") self.assertEqual(returnVal, 0) ac(output, "") output, returnVal = pcs(temp_cib, "stonith create n2-apc3 fence_apc --force") self.assertEqual(returnVal, 0) ac(output, "") output, returnVal = pcs(temp_cib, "stonith level add 1 rh7-1 n1-ipmi") ac(output, "") self.assertEqual(returnVal, 0) output, returnVal = pcs( temp_cib, "stonith level add 2 rh7-1 n1-apc1,n1-apc2,n2-apc2") self.assertEqual(returnVal, 0) ac(output, "") output, returnVal = pcs(temp_cib, "stonith level add 1 rh7-2 n2-ipmi") self.assertEqual(returnVal, 0) ac(output, "") output, returnVal = pcs( temp_cib, "stonith level add 2 rh7-2 n2-apc1,n2-apc2,n2-apc3") self.assertEqual(returnVal, 0) ac(output, "") output, returnVal = pcs(temp_cib, "stonith") self.assertEqual(returnVal, 0) ac( output, """\ n1-ipmi\t(stonith:fence_ilo):\tStopped n2-ipmi\t(stonith:fence_ilo):\tStopped n1-apc1\t(stonith:fence_apc):\tStopped n1-apc2\t(stonith:fence_apc):\tStopped n2-apc1\t(stonith:fence_apc):\tStopped n2-apc2\t(stonith:fence_apc):\tStopped n2-apc3\t(stonith:fence_apc):\tStopped Target: rh7-1 Level 1 - n1-ipmi Level 2 - n1-apc1,n1-apc2,n2-apc2 Target: rh7-2 Level 1 - n2-ipmi Level 2 - n2-apc1,n2-apc2,n2-apc3 """) output, returnVal = pcs(temp_cib, "stonith delete n2-apc2") self.assertEqual(returnVal, 0) ac(output, "Deleting Resource - n2-apc2\n") output, returnVal = pcs(temp_cib, "stonith") self.assertEqual(returnVal, 0) ac( output, """\ n1-ipmi\t(stonith:fence_ilo):\tStopped n2-ipmi\t(stonith:fence_ilo):\tStopped n1-apc1\t(stonith:fence_apc):\tStopped n1-apc2\t(stonith:fence_apc):\tStopped n2-apc1\t(stonith:fence_apc):\tStopped n2-apc3\t(stonith:fence_apc):\tStopped Target: rh7-1 Level 1 - n1-ipmi Level 2 - n1-apc1,n1-apc2 Target: rh7-2 Level 1 - n2-ipmi Level 2 - n2-apc1,n2-apc3 """) output, returnVal = pcs(temp_cib, "stonith delete n2-apc1") self.assertEqual(returnVal, 0) ac(output, "Deleting Resource - n2-apc1\n") output, returnVal = pcs(temp_cib, "stonith") self.assertEqual(returnVal, 0) ac( output, """\ n1-ipmi\t(stonith:fence_ilo):\tStopped n2-ipmi\t(stonith:fence_ilo):\tStopped n1-apc1\t(stonith:fence_apc):\tStopped n1-apc2\t(stonith:fence_apc):\tStopped n2-apc3\t(stonith:fence_apc):\tStopped Target: rh7-1 Level 1 - n1-ipmi Level 2 - n1-apc1,n1-apc2 Target: rh7-2 Level 1 - n2-ipmi Level 2 - n2-apc3 """) output, returnVal = pcs(temp_cib, "stonith delete n2-apc3") self.assertEqual(returnVal, 0) ac(output, "Deleting Resource - n2-apc3\n") output, returnVal = pcs(temp_cib, "stonith") self.assertEqual(returnVal, 0) ac( output, """\ n1-ipmi\t(stonith:fence_ilo):\tStopped n2-ipmi\t(stonith:fence_ilo):\tStopped n1-apc1\t(stonith:fence_apc):\tStopped n1-apc2\t(stonith:fence_apc):\tStopped Target: rh7-1 Level 1 - n1-ipmi Level 2 - n1-apc1,n1-apc2 Target: rh7-2 Level 1 - n2-ipmi """) output, returnVal = pcs(temp_cib, "resource delete n1-apc1") self.assertEqual(returnVal, 0) ac(output, "Deleting Resource - n1-apc1\n") output, returnVal = pcs(temp_cib, "stonith") self.assertEqual(returnVal, 0) ac( output, """\ n1-ipmi\t(stonith:fence_ilo):\tStopped n2-ipmi\t(stonith:fence_ilo):\tStopped n1-apc2\t(stonith:fence_apc):\tStopped Target: rh7-1 Level 1 - n1-ipmi Level 2 - n1-apc2 Target: rh7-2 Level 1 - n2-ipmi """) output, returnVal = pcs(temp_cib, "resource delete n1-apc2") self.assertEqual(returnVal, 0) ac(output, "Deleting Resource - n1-apc2\n") output, returnVal = pcs(temp_cib, "stonith") self.assertEqual(returnVal, 0) ac( output, """\ n1-ipmi\t(stonith:fence_ilo):\tStopped n2-ipmi\t(stonith:fence_ilo):\tStopped Target: rh7-1 Level 1 - n1-ipmi Target: rh7-2 Level 1 - n2-ipmi """)
def testNodeProperties(self): utils.usefile = True utils.filename = temp_cib o,r = utils.run(["cibadmin","-M", '--xml-text', '<nodes><node id="1" uname="rh7-1"><instance_attributes id="nodes-1"/></node><node id="2" uname="rh7-2"><instance_attributes id="nodes-2"/></node></nodes>']) ac(o,"") assert r == 0 o,r = pcs("property set --node=rh7-1 IP=192.168.1.1") ac(o,"") assert r==0 o,r = pcs("property set --node=rh7-2 IP=192.168.2.2") ac(o,"") assert r==0 o,r = pcs("property") ac(o,"Cluster Properties:\nNode Attributes:\n rh7-1: IP=192.168.1.1\n rh7-2: IP=192.168.2.2\n") assert r==0 o,r = pcs("property set --node=rh7-2 IP=") ac(o,"") assert r==0 o,r = pcs("property") ac(o,"Cluster Properties:\nNode Attributes:\n rh7-1: IP=192.168.1.1\n") assert r==0 o,r = pcs("property set --node=rh7-1 IP=192.168.1.1") ac(o,"") assert r==0 o,r = pcs("property set --node=rh7-2 IP=192.168.2.2") ac(o,"") assert r==0 o,r = pcs("property") ac(o,"Cluster Properties:\nNode Attributes:\n rh7-1: IP=192.168.1.1\n rh7-2: IP=192.168.2.2\n") assert r==0 o,r = pcs("property unset --node=rh7-1 IP") ac(o,"") assert r==0 o,r = pcs("property") ac(o,"Cluster Properties:\nNode Attributes:\n rh7-2: IP=192.168.2.2\n") assert r==0 o,r = pcs("property unset --node=rh7-1 IP") ac(o,"Error: attribute: 'IP' doesn't exist for node: 'rh7-1'\n") assert r==2 o,r = pcs("property unset --node=rh7-1 IP --force") ac(o,"") assert r==0
def testStonithDeleteRemovesLevel(self): shutil.copy(rc("cib-empty-with3nodes.xml"), temp_cib) output, returnVal = pcs( temp_cib, "stonith create n1-ipmi fence_ilo --force" ) self.assertEqual(returnVal, 0) ac(output, "") output, returnVal = pcs( temp_cib, "stonith create n2-ipmi fence_ilo --force" ) self.assertEqual(returnVal, 0) ac(output, "") output, returnVal = pcs( temp_cib, "stonith create n1-apc1 fence_apc --force" ) self.assertEqual(returnVal, 0) ac(output, "") output, returnVal = pcs( temp_cib, "stonith create n1-apc2 fence_apc --force" ) self.assertEqual(returnVal, 0) ac(output, "") output, returnVal = pcs( temp_cib, "stonith create n2-apc1 fence_apc --force" ) self.assertEqual(returnVal, 0) ac(output, "") output, returnVal = pcs( temp_cib, "stonith create n2-apc2 fence_apc --force" ) self.assertEqual(returnVal, 0) ac(output, "") output, returnVal = pcs( temp_cib, "stonith create n2-apc3 fence_apc --force" ) self.assertEqual(returnVal, 0) ac(output, "") output, returnVal = pcs(temp_cib, "stonith level add 1 rh7-1 n1-ipmi") ac(output, "") self.assertEqual(returnVal, 0) output, returnVal = pcs( temp_cib, "stonith level add 2 rh7-1 n1-apc1,n1-apc2,n2-apc2" ) self.assertEqual(returnVal, 0) ac(output, "") output, returnVal = pcs(temp_cib, "stonith level add 1 rh7-2 n2-ipmi") self.assertEqual(returnVal, 0) ac(output, "") output, returnVal = pcs( temp_cib, "stonith level add 2 rh7-2 n2-apc1,n2-apc2,n2-apc3" ) self.assertEqual(returnVal, 0) ac(output, "") output, returnVal = pcs(temp_cib, "stonith") self.assertEqual(returnVal, 0) ac(output, """\ n1-ipmi\t(stonith:fence_ilo):\tStopped n2-ipmi\t(stonith:fence_ilo):\tStopped n1-apc1\t(stonith:fence_apc):\tStopped n1-apc2\t(stonith:fence_apc):\tStopped n2-apc1\t(stonith:fence_apc):\tStopped n2-apc2\t(stonith:fence_apc):\tStopped n2-apc3\t(stonith:fence_apc):\tStopped Target: rh7-1 Level 1 - n1-ipmi Level 2 - n1-apc1,n1-apc2,n2-apc2 Target: rh7-2 Level 1 - n2-ipmi Level 2 - n2-apc1,n2-apc2,n2-apc3 """) output, returnVal = pcs(temp_cib, "stonith delete n2-apc2") self.assertEqual(returnVal, 0) ac(output, "Deleting Resource - n2-apc2\n") output, returnVal = pcs(temp_cib, "stonith") self.assertEqual(returnVal, 0) ac(output, """\ n1-ipmi\t(stonith:fence_ilo):\tStopped n2-ipmi\t(stonith:fence_ilo):\tStopped n1-apc1\t(stonith:fence_apc):\tStopped n1-apc2\t(stonith:fence_apc):\tStopped n2-apc1\t(stonith:fence_apc):\tStopped n2-apc3\t(stonith:fence_apc):\tStopped Target: rh7-1 Level 1 - n1-ipmi Level 2 - n1-apc1,n1-apc2 Target: rh7-2 Level 1 - n2-ipmi Level 2 - n2-apc1,n2-apc3 """) output, returnVal = pcs(temp_cib, "stonith delete n2-apc1") self.assertEqual(returnVal, 0) ac(output, "Deleting Resource - n2-apc1\n") output, returnVal = pcs(temp_cib, "stonith") self.assertEqual(returnVal, 0) ac(output, """\ n1-ipmi\t(stonith:fence_ilo):\tStopped n2-ipmi\t(stonith:fence_ilo):\tStopped n1-apc1\t(stonith:fence_apc):\tStopped n1-apc2\t(stonith:fence_apc):\tStopped n2-apc3\t(stonith:fence_apc):\tStopped Target: rh7-1 Level 1 - n1-ipmi Level 2 - n1-apc1,n1-apc2 Target: rh7-2 Level 1 - n2-ipmi Level 2 - n2-apc3 """) output, returnVal = pcs(temp_cib, "stonith delete n2-apc3") self.assertEqual(returnVal, 0) ac(output, "Deleting Resource - n2-apc3\n") output, returnVal = pcs(temp_cib, "stonith") self.assertEqual(returnVal, 0) ac(output, """\ n1-ipmi\t(stonith:fence_ilo):\tStopped n2-ipmi\t(stonith:fence_ilo):\tStopped n1-apc1\t(stonith:fence_apc):\tStopped n1-apc2\t(stonith:fence_apc):\tStopped Target: rh7-1 Level 1 - n1-ipmi Level 2 - n1-apc1,n1-apc2 Target: rh7-2 Level 1 - n2-ipmi """) output, returnVal = pcs(temp_cib, "resource delete n1-apc1") self.assertEqual(returnVal, 0) ac(output, "Deleting Resource - n1-apc1\n") output, returnVal = pcs(temp_cib, "stonith") self.assertEqual(returnVal, 0) ac(output, """\ n1-ipmi\t(stonith:fence_ilo):\tStopped n2-ipmi\t(stonith:fence_ilo):\tStopped n1-apc2\t(stonith:fence_apc):\tStopped Target: rh7-1 Level 1 - n1-ipmi Level 2 - n1-apc2 Target: rh7-2 Level 1 - n2-ipmi """) output, returnVal = pcs(temp_cib, "resource delete n1-apc2") self.assertEqual(returnVal, 0) ac(output, "Deleting Resource - n1-apc2\n") output, returnVal = pcs(temp_cib, "stonith") self.assertEqual(returnVal, 0) ac(output, """\ n1-ipmi\t(stonith:fence_ilo):\tStopped n2-ipmi\t(stonith:fence_ilo):\tStopped Target: rh7-1 Level 1 - n1-ipmi Target: rh7-2 Level 1 - n2-ipmi """)
def testPermissionAddDelete(self): o,r = pcs("acl role create role1 read xpath /xpath1/ write xpath /xpath2/") ac(o,"") assert r == 0 o,r = pcs("acl role create role2 read xpath /xpath3/ write xpath /xpath4/") ac(o,"") assert r == 0 o,r = pcs("acl role create role3 read xpath /xpath5/ write xpath /xpath6/") ac(o,"") assert r == 0 o,r = pcs("acl show") assert r == 0 ac(o,"ACLs are disabled, run 'pcs acl enable' to enable\n\nRole: role1\n Permission: read xpath /xpath1/ (role1-read)\n Permission: write xpath /xpath2/ (role1-write)\nRole: role2\n Permission: read xpath /xpath3/ (role2-read)\n Permission: write xpath /xpath4/ (role2-write)\nRole: role3\n Permission: read xpath /xpath5/ (role3-read)\n Permission: write xpath /xpath6/ (role3-write)\n") o,r = pcs("acl permission add role1 deny xpath /myxpath1/") ac(o,"") assert r == 0 o,r = pcs("acl permission add role4 deny xpath /myxpath2/") ac(o,"") assert r == 0 o,r = pcs("acl show") assert r == 0 ac(o,"ACLs are disabled, run 'pcs acl enable' to enable\n\nRole: role1\n Permission: read xpath /xpath1/ (role1-read)\n Permission: write xpath /xpath2/ (role1-write)\n Permission: deny xpath /myxpath1/ (role1-deny)\nRole: role2\n Permission: read xpath /xpath3/ (role2-read)\n Permission: write xpath /xpath4/ (role2-write)\nRole: role3\n Permission: read xpath /xpath5/ (role3-read)\n Permission: write xpath /xpath6/ (role3-write)\nRole: role4\n Permission: deny xpath /myxpath2/ (role4-deny)\n") o,r = pcs("acl permission delete role4-deny") ac(o,"") assert r == 0 o,r = pcs("acl permission delete role4-deny") ac(o,"Error: Unable to find permission with id: role4-deny\n") assert r == 1 o,r = pcs("acl show") assert r == 0 ac(o,"ACLs are disabled, run 'pcs acl enable' to enable\n\nRole: role1\n Permission: read xpath /xpath1/ (role1-read)\n Permission: write xpath /xpath2/ (role1-write)\n Permission: deny xpath /myxpath1/ (role1-deny)\nRole: role2\n Permission: read xpath /xpath3/ (role2-read)\n Permission: write xpath /xpath4/ (role2-write)\nRole: role3\n Permission: read xpath /xpath5/ (role3-read)\n Permission: write xpath /xpath6/ (role3-write)\nRole: role4\n") o,r = pcs("acl permission delete role3-read") ac(o,"") assert r == 0 o,r = pcs("acl permission delete role3-write") ac(o,"") assert r == 0 o,r = pcs("acl") ac(o,"ACLs are disabled, run 'pcs acl enable' to enable\n\nRole: role1\n Permission: read xpath /xpath1/ (role1-read)\n Permission: write xpath /xpath2/ (role1-write)\n Permission: deny xpath /myxpath1/ (role1-deny)\nRole: role2\n Permission: read xpath /xpath3/ (role2-read)\n Permission: write xpath /xpath4/ (role2-write)\nRole: role3\nRole: role4\n") assert r == 0 o, r = pcs("acl permission delete role1-read") ac(o, "") self.assertEqual(0, r) o, r = pcs("acl permission delete role1-write") ac(o, "") self.assertEqual(0, r) o, r = pcs("acl permission delete role1-deny") ac(o, "") self.assertEqual(0, r) o, r = pcs("acl permission delete role2-read") ac(o, "") self.assertEqual(0, r) o, r = pcs("acl permission delete role2-write") ac(o, "") self.assertEqual(0, r) o, r = pcs("acl") ac(o, """\ ACLs are disabled, run 'pcs acl enable' to enable Role: role1 Role: role2 Role: role3 Role: role4 """) self.assertEqual(0, r) o, r = pcs("acl permission add role1 read") self.assertTrue(o.startswith("\nUsage: pcs acl permission add...")) self.assertEqual(1, r) o, r = pcs("acl permission add role1 read //resources") self.assertTrue(o.startswith("\nUsage: pcs acl permission add...")) self.assertEqual(1, r) o, r = pcs("acl permission add role1 read xpath") self.assertTrue(o.startswith("\nUsage: pcs acl permission add...")) self.assertEqual(1, r) o, r = pcs("acl permission add role1 read id") self.assertTrue(o.startswith("\nUsage: pcs acl permission add...")) self.assertEqual(1, r) o, r = pcs("acl permission add role1 readX xpath //resources") self.assertTrue(o.startswith("\nUsage: pcs acl permission add...")) self.assertEqual(1, r) o, r = pcs("acl permission add role1 read xpathX //resources") self.assertTrue(o.startswith("\nUsage: pcs acl permission add...")) self.assertEqual(1, r) o, r = pcs("acl permission add role1 read id dummy read") self.assertTrue(o.startswith("\nUsage: pcs acl permission add...")) self.assertEqual(1, r) o, r = pcs("acl permission add role1 read id dummy read //resources") self.assertTrue(o.startswith("\nUsage: pcs acl permission add...")) self.assertEqual(1, r) o, r = pcs("acl permission add role1 read id dummy read xpath") self.assertTrue(o.startswith("\nUsage: pcs acl permission add...")) self.assertEqual(1, r) o, r = pcs("acl permission add role1 read id dummy read id") self.assertTrue(o.startswith("\nUsage: pcs acl permission add...")) self.assertEqual(1, r) self.assert_pcs_fail( "acl permission add role1 read id dummy readX xpath //resources", stdout_start='\nUsage: pcs acl permission add...' ) self.assert_pcs_fail( "acl permission add role1 read id dummy read xpathX //resources", stdout_start='\nUsage: pcs acl permission add...' ) o, r = pcs("acl") ac(o, """\ ACLs are disabled, run 'pcs acl enable' to enable Role: role1 Role: role2 Role: role3 Role: role4 """) self.assertEqual(0, r)
def testStonithCreation(self): output, returnVal = pcs(temp_cib, "stonith create test1 fence_noxist") ac( output, "Error: Agent 'fence_noxist' is not installed or does not provide valid metadata: Metadata query for stonith:fence_noxist failed: -5, use --force to override\n" ) assert returnVal == 1 output, returnVal = pcs(temp_cib, "stonith create test1 fence_noxist --force") ac( output, "Warning: Agent 'fence_noxist' is not installed or does not provide valid metadata: Metadata query for stonith:fence_noxist failed: -5\n" ) self.assertEqual(returnVal, 0) output, returnVal = pcs(temp_cib, "stonith create test2 fence_apc") assert returnVal == 1 ac( output, "Error: missing required option(s): 'ipaddr, login' for resource type: stonith:fence_apc (use --force to override)\n" ) output, returnVal = pcs(temp_cib, "stonith create test2 fence_ilo --force") assert returnVal == 0 ac(output, "") output, returnVal = pcs( temp_cib, "stonith create test3 fence_ilo bad_argument=test") assert returnVal == 1 assert output == "Error: resource option(s): 'bad_argument', are not recognized for resource type: 'stonith:fence_ilo' (use --force to override)\n", [ output ] output, returnVal = pcs( temp_cib, "stonith create test9 fence_apc pcmk_status_action=xxx") assert returnVal == 1 ac( output, "Error: missing required option(s): 'ipaddr, login' for resource type: stonith:fence_apc (use --force to override)\n" ) output, returnVal = pcs( temp_cib, "stonith create test9 fence_ilo pcmk_status_action=xxx --force") assert returnVal == 0 ac(output, "") output, returnVal = pcs(temp_cib, "stonith show test9") ac( output, """\ Resource: test9 (class=stonith type=fence_ilo) Attributes: pcmk_status_action=xxx Operations: monitor interval=60s (test9-monitor-interval-60s) """) assert returnVal == 0 output, returnVal = pcs(temp_cib, "stonith delete test9") assert returnVal == 0 assert output == "Deleting Resource - test9\n", [output] output, returnVal = pcs(temp_cib, "stonith create test3 fence_ilo ipaddr=test") assert returnVal == 1 ac( output, "Error: missing required option(s): 'login' for resource type: stonith:fence_ilo (use --force to override)\n" ) output, returnVal = pcs( temp_cib, "stonith create test3 fence_ilo ipaddr=test --force") assert returnVal == 0 ac(output, "") # Testing that pcmk_host_check, pcmk_host_list & pcmk_host_map are allowed for # stonith agents output, returnVal = pcs( temp_cib, 'stonith create apc-fencing fence_apc params ipaddr="morph-apc" login="******" passwd="apc" switch="1" pcmk_host_map="buzz-01:1;buzz-02:2;buzz-03:3;buzz-04:4;buzz-05:5" pcmk_host_check="static-list" pcmk_host_list="buzz-01,buzz-02,buzz-03,buzz-04,buzz-05"' ) assert returnVal == 0 ac(output, "") output, returnVal = pcs(temp_cib, 'resource show apc-fencing') assert returnVal == 1 assert output == 'Error: unable to find resource \'apc-fencing\'\n', [ output ] output, returnVal = pcs(temp_cib, 'stonith show apc-fencing') ac( output, """\ Resource: apc-fencing (class=stonith type=fence_apc) Attributes: ipaddr="morph-apc" login="******" passwd="apc" switch="1" pcmk_host_map="buzz-01:1;buzz-02:2;buzz-03:3;buzz-04:4;buzz-05:5" pcmk_host_check="static-list" pcmk_host_list="buzz-01,buzz-02,buzz-03,buzz-04,buzz-05" Operations: monitor interval=60s (apc-fencing-monitor-interval-60s) """) assert returnVal == 0 output, returnVal = pcs(temp_cib, 'stonith delete apc-fencing') assert returnVal == 0 assert output == 'Deleting Resource - apc-fencing\n', [output] output, returnVal = pcs(temp_cib, "stonith update test3 bad_ipaddr=test") assert returnVal == 1 assert output == "Error: resource option(s): 'bad_ipaddr', are not recognized for resource type: 'stonith::fence_ilo' (use --force to override)\n", [ output ] output, returnVal = pcs(temp_cib, "stonith update test3 login=testA") assert returnVal == 0 assert output == "", [output] output, returnVal = pcs(temp_cib, "stonith show test2") assert returnVal == 0 assert output == " Resource: test2 (class=stonith type=fence_ilo)\n Operations: monitor interval=60s (test2-monitor-interval-60s)\n", [ output ] output, returnVal = pcs(temp_cib, "stonith show --full") ac( output, """\ Resource: test1 (class=stonith type=fence_noxist) Operations: monitor interval=60s (test1-monitor-interval-60s) Resource: test2 (class=stonith type=fence_ilo) Operations: monitor interval=60s (test2-monitor-interval-60s) Resource: test3 (class=stonith type=fence_ilo) Attributes: ipaddr=test login=testA Operations: monitor interval=60s (test3-monitor-interval-60s) """) assert returnVal == 0 output, returnVal = pcs( temp_cib, 'stonith create test-fencing fence_apc pcmk_host_list="rhel7-node1 rhel7-node2" op monitor interval=61s --force' ) assert returnVal == 0 ac(output, "") output, returnVal = pcs(temp_cib, 'config show') ac( output, """\ Cluster Name: test99 Corosync Nodes: rh7-1 rh7-2 Pacemaker Nodes: Resources: Stonith Devices: Resource: test1 (class=stonith type=fence_noxist) Operations: monitor interval=60s (test1-monitor-interval-60s) Resource: test2 (class=stonith type=fence_ilo) Operations: monitor interval=60s (test2-monitor-interval-60s) Resource: test3 (class=stonith type=fence_ilo) Attributes: ipaddr=test login=testA Operations: monitor interval=60s (test3-monitor-interval-60s) Resource: test-fencing (class=stonith type=fence_apc) Attributes: pcmk_host_list="rhel7-node1 Operations: monitor interval=61s (test-fencing-monitor-interval-61s) Fencing Levels: Location Constraints: Ordering Constraints: Colocation Constraints: Ticket Constraints: Alerts: No alerts defined Resources Defaults: No defaults set Operations Defaults: No defaults set Cluster Properties: Quorum: Options: """) assert returnVal == 0
def testUserGroupCreateDeleteWithRoles(self): o, r = pcs( temp_cib, "acl role create role1 read xpath /xpath1/ write xpath /xpath2/" ) assert r == 0 ac(o, "") o, r = pcs( temp_cib, "acl role create role2 deny xpath /xpath3/ deny xpath /xpath4/" ) assert r == 0 ac(o, "") o, r = pcs( temp_cib, "acl role create role3 read xpath /xpath5/ read xpath /xpath6/" ) assert r == 0 ac(o, "") o, r = pcs(temp_cib, "acl user create user1 roleX") ac(o, "Error: ACL role 'roleX' does not exist\n") self.assertEqual(1, r) o, r = pcs(temp_cib, "acl user create user1 role1 roleX") ac(o, "Error: ACL role 'roleX' does not exist\n") self.assertEqual(1, r) o, r = pcs(temp_cib, "acl group create group1 roleX") ac(o, "Error: ACL role 'roleX' does not exist\n") self.assertEqual(1, r) o, r = pcs(temp_cib, "acl group create group1 role1 roleX") ac(o, "Error: ACL role 'roleX' does not exist\n") self.assertEqual(1, r) o, r = pcs(temp_cib, "acl") ac(o, """\ ACLs are disabled, run 'pcs acl enable' to enable Role: role1 Permission: read xpath /xpath1/ (role1-read) Permission: write xpath /xpath2/ (role1-write) Role: role2 Permission: deny xpath /xpath3/ (role2-deny) Permission: deny xpath /xpath4/ (role2-deny-1) Role: role3 Permission: read xpath /xpath5/ (role3-read) Permission: read xpath /xpath6/ (role3-read-1) """) self.assertEqual(0, r) o, r = pcs(temp_cib, "acl user create user1 role1 role2") assert r == 0 ac(o, "") o, r = pcs(temp_cib, "acl group create group1 role1 role3") assert r == 0 ac(o, "") o, r = pcs(temp_cib, "acl") assert r == 0 ac( o, """\ ACLs are disabled, run 'pcs acl enable' to enable User: user1 Roles: role1 role2 Group: group1 Roles: role1 role3 Role: role1 Permission: read xpath /xpath1/ (role1-read) Permission: write xpath /xpath2/ (role1-write) Role: role2 Permission: deny xpath /xpath3/ (role2-deny) Permission: deny xpath /xpath4/ (role2-deny-1) Role: role3 Permission: read xpath /xpath5/ (role3-read) Permission: read xpath /xpath6/ (role3-read-1) """ ) o, r = pcs(temp_cib, "acl role create group1") assert r == 1 ac(o, "Error: 'group1' already exists\n") o, r = pcs(temp_cib, "acl role create role1") assert r == 1 ac(o, "Error: 'role1' already exists\n") o, r = pcs(temp_cib, "acl user create user1") assert r == 1 ac(o, "Error: 'user1' already exists\n") o, r = pcs(temp_cib, "acl group create group1") assert r == 1 ac(o, "Error: 'group1' already exists\n") o, r = pcs(temp_cib, "acl group create role1") assert r == 1 ac(o, "Error: 'role1' already exists\n") o, r = pcs(temp_cib, "acl role assign role1 to noexist") assert r == 1 ac(o, "Error: ACL group/ACL user 'noexist' does not exist\n") o, r = pcs(temp_cib, "acl role assign noexist to user1") assert r == 1 ac(o, "Error: ACL role 'noexist' does not exist\n") o, r = pcs(temp_cib, "acl role assign role3 to user1") assert r == 0 ac(o, "") o, r = pcs(temp_cib, "acl") assert r == 0 ac(o, """\ ACLs are disabled, run 'pcs acl enable' to enable User: user1 Roles: role1 role2 role3 Group: group1 Roles: role1 role3 Role: role1 Permission: read xpath /xpath1/ (role1-read) Permission: write xpath /xpath2/ (role1-write) Role: role2 Permission: deny xpath /xpath3/ (role2-deny) Permission: deny xpath /xpath4/ (role2-deny-1) Role: role3 Permission: read xpath /xpath5/ (role3-read) Permission: read xpath /xpath6/ (role3-read-1) """) o, r = pcs(temp_cib, "acl role unassign noexist from user1") assert r == 1 ac(o, "Error: Role 'noexist' is not assigned to 'user1'\n") o, r = pcs(temp_cib, "acl role unassign role3 from noexist") assert r == 1 ac(o, "Error: ACL group/ACL user 'noexist' does not exist\n") o, r = pcs(temp_cib, "acl role unassign role3 from user1") assert r == 0 ac(o, "") o, r = pcs(temp_cib, "acl") assert r == 0 ac(o, """\ ACLs are disabled, run 'pcs acl enable' to enable User: user1 Roles: role1 role2 Group: group1 Roles: role1 role3 Role: role1 Permission: read xpath /xpath1/ (role1-read) Permission: write xpath /xpath2/ (role1-write) Role: role2 Permission: deny xpath /xpath3/ (role2-deny) Permission: deny xpath /xpath4/ (role2-deny-1) Role: role3 Permission: read xpath /xpath5/ (role3-read) Permission: read xpath /xpath6/ (role3-read-1) """) o, r = pcs(temp_cib, "acl role unassign role2 from user1") assert r == 0 ac(o, "") o, r = pcs(temp_cib, "acl role unassign role1 from user1") assert r == 0 ac(o, "") o, r = pcs(temp_cib, "acl") ac(o, """\ ACLs are disabled, run 'pcs acl enable' to enable User: user1 Roles: Group: group1 Roles: role1 role3 Role: role1 Permission: read xpath /xpath1/ (role1-read) Permission: write xpath /xpath2/ (role1-write) Role: role2 Permission: deny xpath /xpath3/ (role2-deny) Permission: deny xpath /xpath4/ (role2-deny-1) Role: role3 Permission: read xpath /xpath5/ (role3-read) Permission: read xpath /xpath6/ (role3-read-1) """) assert r == 0 o, r = pcs(temp_cib, "acl role delete role3") assert r == 0 ac(o, "") o, r = pcs(temp_cib, "acl") ac(o, """\ ACLs are disabled, run 'pcs acl enable' to enable User: user1 Roles: Group: group1 Roles: role1 Role: role1 Permission: read xpath /xpath1/ (role1-read) Permission: write xpath /xpath2/ (role1-write) Role: role2 Permission: deny xpath /xpath3/ (role2-deny) Permission: deny xpath /xpath4/ (role2-deny-1) """) assert r == 0 o, r = pcs(temp_cib, "acl role assign role2 to user1") assert r == 0 ac(o, "") o, r = pcs(temp_cib, "acl") assert r == 0 ac(o, """\ ACLs are disabled, run 'pcs acl enable' to enable User: user1 Roles: role2 Group: group1 Roles: role1 Role: role1 Permission: read xpath /xpath1/ (role1-read) Permission: write xpath /xpath2/ (role1-write) Role: role2 Permission: deny xpath /xpath3/ (role2-deny) Permission: deny xpath /xpath4/ (role2-deny-1) """) o, r = pcs(temp_cib, "acl role assign role1 user1") ac(o, "") assert r == 0 o, r = pcs(temp_cib, "acl") ac(o, """\ ACLs are disabled, run 'pcs acl enable' to enable User: user1 Roles: role2 role1 Group: group1 Roles: role1 Role: role1 Permission: read xpath /xpath1/ (role1-read) Permission: write xpath /xpath2/ (role1-write) Role: role2 Permission: deny xpath /xpath3/ (role2-deny) Permission: deny xpath /xpath4/ (role2-deny-1) """) assert r == 0 o, r = pcs(temp_cib, "acl role unassign role2 from user1 --autodelete") ac(o, "") assert r == 0 o, r = pcs(temp_cib, "acl") ac(o, """\ ACLs are disabled, run 'pcs acl enable' to enable User: user1 Roles: role1 Group: group1 Roles: role1 Role: role1 Permission: read xpath /xpath1/ (role1-read) Permission: write xpath /xpath2/ (role1-write) Role: role2 Permission: deny xpath /xpath3/ (role2-deny) Permission: deny xpath /xpath4/ (role2-deny-1) """) assert r == 0 o, r = pcs(temp_cib, "acl role unassign role1 from user1 --autodelete") ac(o, "") assert r == 0 o, r = pcs(temp_cib, "acl") ac(o, """\ ACLs are disabled, run 'pcs acl enable' to enable Group: group1 Roles: role1 Role: role1 Permission: read xpath /xpath1/ (role1-read) Permission: write xpath /xpath2/ (role1-write) Role: role2 Permission: deny xpath /xpath3/ (role2-deny) Permission: deny xpath /xpath4/ (role2-deny-1) """) assert r == 0 o, r = pcs(temp_cib, "acl user create user1 role1 role2") ac(o, "") assert r == 0 o, r = pcs(temp_cib, "acl") ac(o, """\ ACLs are disabled, run 'pcs acl enable' to enable User: user1 Roles: role1 role2 Group: group1 Roles: role1 Role: role1 Permission: read xpath /xpath1/ (role1-read) Permission: write xpath /xpath2/ (role1-write) Role: role2 Permission: deny xpath /xpath3/ (role2-deny) Permission: deny xpath /xpath4/ (role2-deny-1) """) assert r == 0 o, r = pcs(temp_cib, "acl role delete role1 --autodelete") ac(o, "") assert r == 0 o, r = pcs(temp_cib, "acl") ac(o, """\ ACLs are disabled, run 'pcs acl enable' to enable User: user1 Roles: role2 Role: role2 Permission: deny xpath /xpath3/ (role2-deny) Permission: deny xpath /xpath4/ (role2-deny-1) """) assert r == 0 o, r = pcs(temp_cib, "acl role delete role2") ac(o, "") assert r == 0 o, r = pcs(temp_cib, "acl") ac(o, """\ ACLs are disabled, run 'pcs acl enable' to enable User: user1 Roles: """) assert r == 0
def testStonithCreation(self): output, returnVal = pcs(temp_cib, "stonith create test1 fence_noxist") ac( output, "Error: Agent 'fence_noxist' is not installed or does not provide valid metadata: Metadata query for stonith:fence_noxist failed: -5, use --force to override\n" ) assert returnVal == 1 output, returnVal = pcs(temp_cib, "stonith create test1 fence_noxist --force") ac( output, "Warning: Agent 'fence_noxist' is not installed or does not provide valid metadata: Metadata query for stonith:fence_noxist failed: -5\n" ) self.assertEqual(returnVal, 0) self.assert_pcs_fail( "stonith create test2 fence_apc", "Error: required stonith options 'ipaddr', 'login' are missing, use --force to override\n" ) self.assert_pcs_success( "stonith create test2 fence_apc --force", "Warning: required stonith options 'ipaddr', 'login' are missing\n" ) self.assert_pcs_fail( "stonith create test3 fence_apc bad_argument=test", stdout_start="Error: invalid stonith option 'bad_argument'," " allowed options are:") self.assert_pcs_fail( "stonith create test9 fence_apc pcmk_status_action=xxx", "Error: required stonith options 'ipaddr', 'login' are missing, use --force to override\n" ) self.assert_pcs_success( "stonith create test9 fence_apc pcmk_status_action=xxx --force", "Warning: required stonith options 'ipaddr', 'login' are missing\n" ) output, returnVal = pcs(temp_cib, "stonith show test9") ac( output, """\ Resource: test9 (class=stonith type=fence_apc) Attributes: pcmk_status_action=xxx Operations: monitor interval=60s (test9-monitor-interval-60s) """) assert returnVal == 0 self.assert_pcs_success("stonith delete test9", "Deleting Resource - test9\n") self.assert_pcs_fail( "stonith create test3 fence_ilo ipaddr=test", "Error: required stonith option 'login' is missing, use --force to override\n" ) self.assert_pcs_success( "stonith create test3 fence_ilo ipaddr=test --force", "Warning: required stonith option 'login' is missing\n") # Testing that pcmk_host_check, pcmk_host_list & pcmk_host_map are allowed for # stonith agents self.assert_pcs_success( 'stonith create apc-fencing fence_apc ipaddr="morph-apc" login="******" passwd="apc" switch="1" pcmk_host_map="buzz-01:1;buzz-02:2;buzz-03:3;buzz-04:4;buzz-05:5" pcmk_host_check="static-list" pcmk_host_list="buzz-01,buzz-02,buzz-03,buzz-04,buzz-05"', ) output, returnVal = pcs(temp_cib, 'resource show apc-fencing') assert returnVal == 1 assert output == 'Error: unable to find resource \'apc-fencing\'\n', [ output ] self.assert_pcs_success( "stonith show apc-fencing", outdent("""\ Resource: apc-fencing (class=stonith type=fence_apc) Attributes: ipaddr="morph-apc" login="******" passwd="apc" pcmk_host_check="static-list" pcmk_host_list="buzz-01,buzz-02,buzz-03,buzz-04,buzz-05" pcmk_host_map="buzz-01:1;buzz-02:2;buzz-03:3;buzz-04:4;buzz-05:5" switch="1" Operations: monitor interval=60s (apc-fencing-monitor-interval-60s) """)) self.assert_pcs_success("stonith delete apc-fencing", "Deleting Resource - apc-fencing\n") self.assert_pcs_fail( "stonith update test3 bad_ipaddr=test", stdout_regexp=( "^Error: invalid stonith option 'bad_ipaddr', allowed options" " are: [^\n]+, use --force to override\n$")) output, returnVal = pcs(temp_cib, "stonith update test3 login=testA") assert returnVal == 0 assert output == "", [output] output, returnVal = pcs(temp_cib, "stonith show test2") assert returnVal == 0 assert output == " Resource: test2 (class=stonith type=fence_apc)\n Operations: monitor interval=60s (test2-monitor-interval-60s)\n", [ output ] output, returnVal = pcs(temp_cib, "stonith show --full") ac( output, """\ Resource: test1 (class=stonith type=fence_noxist) Operations: monitor interval=60s (test1-monitor-interval-60s) Resource: test2 (class=stonith type=fence_apc) Operations: monitor interval=60s (test2-monitor-interval-60s) Resource: test3 (class=stonith type=fence_ilo) Attributes: ipaddr=test login=testA Operations: monitor interval=60s (test3-monitor-interval-60s) """) assert returnVal == 0 self.assert_pcs_success( "stonith create test-fencing fence_apc 'pcmk_host_list=rhel7-node1 rhel7-node2' op monitor interval=61s --force", "Warning: required stonith options 'ipaddr', 'login' are missing\n" ) self.assert_pcs_success( "config show", outdent("""\ Cluster Name: test99 Corosync Nodes: rh7-1 rh7-2 Pacemaker Nodes: Resources: Stonith Devices: Resource: test1 (class=stonith type=fence_noxist) Operations: monitor interval=60s (test1-monitor-interval-60s) Resource: test2 (class=stonith type=fence_apc) Operations: monitor interval=60s (test2-monitor-interval-60s) Resource: test3 (class=stonith type=fence_ilo) Attributes: ipaddr=test login=testA Operations: monitor interval=60s (test3-monitor-interval-60s) Resource: test-fencing (class=stonith type=fence_apc) Attributes: pcmk_host_list="rhel7-node1 rhel7-node2" Operations: monitor interval=61s (test-fencing-monitor-interval-61s) Fencing Levels: Location Constraints: Ordering Constraints: Colocation Constraints: Ticket Constraints: Alerts: No alerts defined Resources Defaults: No defaults set Operations Defaults: No defaults set Cluster Properties: Quorum: Options: """))
def testStonithCreation(self): output, returnVal = pcs(temp_cib, "stonith create test1 fence_noxist") assert returnVal == 1 assert output == "Error: Agent 'fence_noxist' not found, use --force to override\n" output, returnVal = pcs(temp_cib, "stonith create test1 fence_noxist --force") ac(output, "Warning: Agent 'fence_noxist' not found\n") self.assertEqual(returnVal, 0) output, returnVal = pcs(temp_cib, "stonith create test2 fence_apc") assert returnVal == 1 ac(output,"Error: missing required option(s): 'ipaddr, login' for resource type: stonith:fence_apc (use --force to override)\n") output, returnVal = pcs(temp_cib, "stonith create test2 fence_ilo --force") assert returnVal == 0 ac(output,"") output, returnVal = pcs(temp_cib, "stonith create test3 fence_ilo bad_argument=test") assert returnVal == 1 assert output == "Error: resource option(s): 'bad_argument', are not recognized for resource type: 'stonith:fence_ilo' (use --force to override)\n",[output] output, returnVal = pcs(temp_cib, "stonith create test9 fence_apc pcmk_status_action=xxx") assert returnVal == 1 ac(output,"Error: missing required option(s): 'ipaddr, login' for resource type: stonith:fence_apc (use --force to override)\n") output, returnVal = pcs(temp_cib, "stonith create test9 fence_ilo pcmk_status_action=xxx --force") assert returnVal == 0 ac(output,"") output, returnVal = pcs(temp_cib, "stonith show test9") ac(output, """\ Resource: test9 (class=stonith type=fence_ilo) Attributes: pcmk_status_action=xxx Operations: monitor interval=60s (test9-monitor-interval-60s) """) assert returnVal == 0 output, returnVal = pcs(temp_cib, "stonith delete test9") assert returnVal == 0 assert output == "Deleting Resource - test9\n",[output] output, returnVal = pcs(temp_cib, "stonith create test3 fence_ilo ipaddr=test") assert returnVal == 1 ac(output,"Error: missing required option(s): 'login' for resource type: stonith:fence_ilo (use --force to override)\n") output, returnVal = pcs(temp_cib, "stonith create test3 fence_ilo ipaddr=test --force") assert returnVal == 0 ac(output,"") # Testing that pcmk_host_check, pcmk_host_list & pcmk_host_map are allowed for # stonith agents output, returnVal = pcs(temp_cib, 'stonith create apc-fencing fence_apc params ipaddr="morph-apc" login="******" passwd="apc" switch="1" pcmk_host_map="buzz-01:1;buzz-02:2;buzz-03:3;buzz-04:4;buzz-05:5" pcmk_host_check="static-list" pcmk_host_list="buzz-01,buzz-02,buzz-03,buzz-04,buzz-05"') assert returnVal == 0 ac(output,"") output, returnVal = pcs(temp_cib, 'resource show apc-fencing') assert returnVal == 1 assert output == 'Error: unable to find resource \'apc-fencing\'\n',[output] output, returnVal = pcs(temp_cib, 'stonith show apc-fencing') ac(output, """\ Resource: apc-fencing (class=stonith type=fence_apc) Attributes: ipaddr="morph-apc" login="******" passwd="apc" switch="1" pcmk_host_map="buzz-01:1;buzz-02:2;buzz-03:3;buzz-04:4;buzz-05:5" pcmk_host_check="static-list" pcmk_host_list="buzz-01,buzz-02,buzz-03,buzz-04,buzz-05" Operations: monitor interval=60s (apc-fencing-monitor-interval-60s) """) assert returnVal == 0 output, returnVal = pcs(temp_cib, 'stonith delete apc-fencing') assert returnVal == 0 assert output == 'Deleting Resource - apc-fencing\n',[output] output, returnVal = pcs(temp_cib, "stonith update test3 bad_ipaddr=test") assert returnVal == 1 assert output == "Error: resource option(s): 'bad_ipaddr', are not recognized for resource type: 'stonith::fence_ilo' (use --force to override)\n",[output] output, returnVal = pcs(temp_cib, "stonith update test3 login=testA") assert returnVal == 0 assert output == "",[output] output, returnVal = pcs(temp_cib, "stonith show test2") assert returnVal == 0 assert output == " Resource: test2 (class=stonith type=fence_ilo)\n Operations: monitor interval=60s (test2-monitor-interval-60s)\n",[output] output, returnVal = pcs(temp_cib, "stonith show --full") ac(output, """\ Resource: test1 (class=stonith type=fence_noxist) Operations: monitor interval=60s (test1-monitor-interval-60s) Resource: test2 (class=stonith type=fence_ilo) Operations: monitor interval=60s (test2-monitor-interval-60s) Resource: test3 (class=stonith type=fence_ilo) Attributes: ipaddr=test login=testA Operations: monitor interval=60s (test3-monitor-interval-60s) """) assert returnVal == 0 output, returnVal = pcs(temp_cib, 'stonith create test-fencing fence_apc pcmk_host_list="rhel7-node1 rhel7-node2" op monitor interval=61s --force') assert returnVal == 0 ac(output,"") output, returnVal = pcs(temp_cib, 'config show') ac(output, """\ Cluster Name: test99 Corosync Nodes: rh7-1 rh7-2 Pacemaker Nodes: Resources: Stonith Devices: Resource: test1 (class=stonith type=fence_noxist) Operations: monitor interval=60s (test1-monitor-interval-60s) Resource: test2 (class=stonith type=fence_ilo) Operations: monitor interval=60s (test2-monitor-interval-60s) Resource: test3 (class=stonith type=fence_ilo) Attributes: ipaddr=test login=testA Operations: monitor interval=60s (test3-monitor-interval-60s) Resource: test-fencing (class=stonith type=fence_apc) Attributes: pcmk_host_list="rhel7-node1 Operations: monitor interval=61s (test-fencing-monitor-interval-61s) Fencing Levels: Location Constraints: Ordering Constraints: Colocation Constraints: Ticket Constraints: Alerts: No alerts defined Resources Defaults: No defaults set Operations Defaults: No defaults set Cluster Properties: Quorum: Options: """) assert returnVal == 0
def testRoleCreateDelete(self): o, r = pcs("acl role create role0 read") self.assertTrue(o.startswith("\nUsage: pcs acl role create...")) self.assertEqual(1, r) o, r = pcs("acl role create role0 read //resources") self.assertTrue(o.startswith("\nUsage: pcs acl role create...")) self.assertEqual(1, r) o, r = pcs("acl role create role0 read xpath") self.assertTrue(o.startswith("\nUsage: pcs acl role create...")) self.assertEqual(1, r) o, r = pcs("acl role create role0 read id") self.assertTrue(o.startswith("\nUsage: pcs acl role create...")) self.assertEqual(1, r) o, r = pcs("acl role create role0 readX xpath //resources") self.assertTrue(o.startswith("\nUsage: pcs acl role create...")) self.assertEqual(1, r) o, r = pcs("acl role create role0 read xpathX //resources") self.assertTrue(o.startswith("\nUsage: pcs acl role create...")) self.assertEqual(1, r) o, r = pcs("acl role create role0 description=test read") self.assertTrue(o.startswith("\nUsage: pcs acl role create...")) self.assertEqual(1, r) o, r = pcs("acl role create role0 description=test read //resources") self.assertTrue(o.startswith("\nUsage: pcs acl role create...")) self.assertEqual(1, r) o, r = pcs("acl role create role0 description=test read xpath") self.assertTrue(o.startswith("\nUsage: pcs acl role create...")) self.assertEqual(1, r) o, r = pcs("acl role create role0 description=test read id") self.assertTrue(o.startswith("\nUsage: pcs acl role create...")) self.assertEqual(1, r) o, r = pcs( "acl role create role0 description=test readX xpath //resources" ) self.assertTrue(o.startswith("\nUsage: pcs acl role create...")) self.assertEqual(1, r) o, r = pcs( "acl role create role0 description=test read xpathX //resources" ) self.assertTrue(o.startswith("\nUsage: pcs acl role create...")) self.assertEqual(1, r) o, r = pcs("acl role create role0 desc=test read") self.assertTrue(o.startswith("\nUsage: pcs acl role create...")) self.assertEqual(1, r) o, r = pcs("acl role create role0 desc=test read //resources") self.assertTrue(o.startswith("\nUsage: pcs acl role create...")) self.assertEqual(1, r) o, r = pcs("acl role create role0 desc=test read xpath") self.assertTrue(o.startswith("\nUsage: pcs acl role create...")) self.assertEqual(1, r) o, r = pcs("acl role create role0 desc=test read id") self.assertTrue(o.startswith("\nUsage: pcs acl role create...")) self.assertEqual(1, r) o, r = pcs("acl role create role0 desc=test readX xpath //resources") self.assertTrue(o.startswith("\nUsage: pcs acl role create...")) self.assertEqual(1, r) o, r = pcs("acl role create role0 desc=test read xpathX //resources") self.assertTrue(o.startswith("\nUsage: pcs acl role create...")) self.assertEqual(1, r) o,r = pcs("acl") ac(o, "ACLs are disabled, run 'pcs acl enable' to enable\n\n") self.assertEqual(0, r) o,r = pcs("acl role create role0") ac(o,"") assert r == 0 o,r = pcs("acl role create role0") ac(o,"Error: 'role0' already exists\n") assert r == 1 o,r = pcs("acl role create role0d description='empty role'") ac(o,"") assert r == 0 o,r = pcs("acl role create role1 read xpath /xpath/") ac(o,"") assert r == 0 o,r = pcs("acl role create role2 description='with description' READ XPATH /xpath/") assert r == 0 ac(o,"") o,r = pcs("acl role create role3 Read XPath /xpath_query/ wRiTe xpATH /xpath_query2/ deny xpath /xpath_query3/") assert r == 0 ac(o,"") o,r = pcs("acl") ac(o,"ACLs are disabled, run 'pcs acl enable' to enable\n\nRole: role0\nRole: role0d\n Description: empty role\nRole: role1\n Permission: read xpath /xpath/ (role1-read)\nRole: role2\n Description: with description\n Permission: read xpath /xpath/ (role2-read)\nRole: role3\n Permission: read xpath /xpath_query/ (role3-read)\n Permission: write xpath /xpath_query2/ (role3-write)\n Permission: deny xpath /xpath_query3/ (role3-deny)\n") assert r == 0 o,r = pcs("acl role delete role2") assert r == 0 ac(o,"") o,r = pcs("acl") ac(o,"ACLs are disabled, run 'pcs acl enable' to enable\n\nRole: role0\nRole: role0d\n Description: empty role\nRole: role1\n Permission: read xpath /xpath/ (role1-read)\nRole: role3\n Permission: read xpath /xpath_query/ (role3-read)\n Permission: write xpath /xpath_query2/ (role3-write)\n Permission: deny xpath /xpath_query3/ (role3-deny)\n") assert r == 0 o,r = pcs("acl role delete role2") assert r == 1 ac(o,"Error: unable to find acl role: role2\n") o,r = pcs("acl role delete role1") assert r == 0 ac(o,"") o,r = pcs("acl role delete role3") assert r == 0 ac(o,"") o,r = pcs("acl role delete role0") assert r == 0 ac(o,"") o,r = pcs("acl role delete role0d") assert r == 0 ac(o,"") o,r = pcs("acl") ac(o,"ACLs are disabled, run 'pcs acl enable' to enable\n\n") assert r == 0
def testEmpty(self): output, returnVal = pcs(temp_cib, "property") assert returnVal == 0, 'Unable to list resources' assert output == "Cluster Properties:\n", [output]
def testUserGroupCreateDelete(self): o, r = pcs(temp_cib, "acl") assert r == 0 ac(o, "ACLs are disabled, run 'pcs acl enable' to enable\n\n") o, r = pcs(temp_cib, "acl user create user1") ac(o, "") assert r == 0 o, r = pcs(temp_cib, "acl user create user2") assert r == 0 ac(o, "") o, r = pcs(temp_cib, "acl user create user1") assert r == 1 ac(o, "Error: 'user1' already exists\n") o, r = pcs(temp_cib, "acl group create group1") ac(o, "") assert r == 0 o, r = pcs(temp_cib, "acl group create group2") assert r == 0 ac(o, "") o, r = pcs(temp_cib, "acl group create group1") assert r == 1 ac(o, "Error: 'group1' already exists\n") o, r = pcs(temp_cib, "acl") ac(o, """\ ACLs are disabled, run 'pcs acl enable' to enable User: user1 Roles: User: user2 Roles: Group: group1 Roles: Group: group2 Roles: """) assert r == 0 o, r = pcs(temp_cib, "acl group delete user1") assert r == 1 ac(o, "Error: 'user1' is not an ACL group\n") o, r = pcs(temp_cib, "acl") ac(o, """\ ACLs are disabled, run 'pcs acl enable' to enable User: user1 Roles: User: user2 Roles: Group: group1 Roles: Group: group2 Roles: """) assert r == 0 o, r = pcs(temp_cib, "acl group delete group2") ac(o, "") assert r == 0 o, r = pcs(temp_cib, "acl") ac(o, """\ ACLs are disabled, run 'pcs acl enable' to enable User: user1 Roles: User: user2 Roles: Group: group1 Roles: """) assert r == 0 o, r = pcs(temp_cib, "acl group remove group1") ac(o, "") assert r == 0 o, r = pcs(temp_cib, "acl") ac(o, """\ ACLs are disabled, run 'pcs acl enable' to enable User: user1 Roles: User: user2 Roles: """) assert r == 0 o, r = pcs(temp_cib, "acl user delete user1") ac(o, "") assert r == 0 o, r = pcs(temp_cib, "acl") ac(o, """\ ACLs are disabled, run 'pcs acl enable' to enable User: user2 Roles: """) assert r == 0 o, r = pcs(temp_cib, "acl user remove user2") ac(o, "") assert r == 0 o, r = pcs(temp_cib, "acl") assert r == 0 ac(o, "ACLs are disabled, run 'pcs acl enable' to enable\n\n")
def testStonithDeleteRemovesLevel(self): output, returnVal = pcs( temp_cib, "stonith create n1-ipmi fence_ilo --force" ) self.assertEqual(returnVal, 0) ac(output, "") output, returnVal = pcs( temp_cib, "stonith create n2-ipmi fence_ilo --force" ) self.assertEqual(returnVal, 0) ac(output, "") output, returnVal = pcs( temp_cib, "stonith create n1-apc1 fence_apc --force" ) self.assertEqual(returnVal, 0) ac(output, "") output, returnVal = pcs( temp_cib, "stonith create n1-apc2 fence_apc --force" ) self.assertEqual(returnVal, 0) ac(output, "") output, returnVal = pcs( temp_cib, "stonith create n2-apc1 fence_apc --force" ) self.assertEqual(returnVal, 0) ac(output, "") output, returnVal = pcs( temp_cib, "stonith create n2-apc2 fence_apc --force" ) self.assertEqual(returnVal, 0) ac(output, "") output, returnVal = pcs( temp_cib, "stonith create n2-apc3 fence_apc --force" ) self.assertEqual(returnVal, 0) ac(output, "") output, returnVal = pcs(temp_cib, "stonith level add 1 rh7-1 n1-ipmi") self.assertEqual(returnVal, 0) ac(output, "") output, returnVal = pcs( temp_cib, "stonith level add 2 rh7-1 n1-apc1,n1-apc2,n2-apc2" ) self.assertEqual(returnVal, 0) ac(output, "") output, returnVal = pcs(temp_cib, "stonith level add 1 rh7-2 n2-ipmi") self.assertEqual(returnVal, 0) ac(output, "") output, returnVal = pcs( temp_cib, "stonith level add 2 rh7-2 n2-apc1,n2-apc2,n2-apc3" ) self.assertEqual(returnVal, 0) ac(output, "") output, returnVal = pcs(temp_cib, "stonith") self.assertEqual(returnVal, 0) ac(output, """\ n1-ipmi\t(stonith:fence_ilo):\tStopped n2-ipmi\t(stonith:fence_ilo):\tStopped n1-apc1\t(stonith:fence_apc):\tStopped n1-apc2\t(stonith:fence_apc):\tStopped n2-apc1\t(stonith:fence_apc):\tStopped n2-apc2\t(stonith:fence_apc):\tStopped n2-apc3\t(stonith:fence_apc):\tStopped Node: rh7-1 Level 1 - n1-ipmi Level 2 - n1-apc1,n1-apc2,n2-apc2 Node: rh7-2 Level 1 - n2-ipmi Level 2 - n2-apc1,n2-apc2,n2-apc3 """) output, returnVal = pcs(temp_cib, "stonith delete n2-apc2") self.assertEqual(returnVal, 0) ac(output, "Deleting Resource - n2-apc2\n") output, returnVal = pcs(temp_cib, "stonith") self.assertEqual(returnVal, 0) ac(output, """\ n1-ipmi\t(stonith:fence_ilo):\tStopped n2-ipmi\t(stonith:fence_ilo):\tStopped n1-apc1\t(stonith:fence_apc):\tStopped n1-apc2\t(stonith:fence_apc):\tStopped n2-apc1\t(stonith:fence_apc):\tStopped n2-apc3\t(stonith:fence_apc):\tStopped Node: rh7-1 Level 1 - n1-ipmi Level 2 - n1-apc1,n1-apc2 Node: rh7-2 Level 1 - n2-ipmi Level 2 - n2-apc1,n2-apc3 """) output, returnVal = pcs(temp_cib, "stonith delete n2-apc1") self.assertEqual(returnVal, 0) ac(output, "Deleting Resource - n2-apc1\n") output, returnVal = pcs(temp_cib, "stonith") self.assertEqual(returnVal, 0) ac(output, """\ n1-ipmi\t(stonith:fence_ilo):\tStopped n2-ipmi\t(stonith:fence_ilo):\tStopped n1-apc1\t(stonith:fence_apc):\tStopped n1-apc2\t(stonith:fence_apc):\tStopped n2-apc3\t(stonith:fence_apc):\tStopped Node: rh7-1 Level 1 - n1-ipmi Level 2 - n1-apc1,n1-apc2 Node: rh7-2 Level 1 - n2-ipmi Level 2 - n2-apc3 """) output, returnVal = pcs(temp_cib, "stonith delete n2-apc3") self.assertEqual(returnVal, 0) ac(output, "Deleting Resource - n2-apc3\n") output, returnVal = pcs(temp_cib, "stonith") self.assertEqual(returnVal, 0) ac(output, """\ n1-ipmi\t(stonith:fence_ilo):\tStopped n2-ipmi\t(stonith:fence_ilo):\tStopped n1-apc1\t(stonith:fence_apc):\tStopped n1-apc2\t(stonith:fence_apc):\tStopped Node: rh7-1 Level 1 - n1-ipmi Level 2 - n1-apc1,n1-apc2 Node: rh7-2 Level 1 - n2-ipmi """) output, returnVal = pcs(temp_cib, "resource delete n1-apc1") self.assertEqual(returnVal, 0) ac(output, "Deleting Resource - n1-apc1\n") output, returnVal = pcs(temp_cib, "stonith") self.assertEqual(returnVal, 0) ac(output, """\ n1-ipmi\t(stonith:fence_ilo):\tStopped n2-ipmi\t(stonith:fence_ilo):\tStopped n1-apc2\t(stonith:fence_apc):\tStopped Node: rh7-1 Level 1 - n1-ipmi Level 2 - n1-apc2 Node: rh7-2 Level 1 - n2-ipmi """) output, returnVal = pcs(temp_cib, "resource delete n1-apc2") self.assertEqual(returnVal, 0) ac(output, "Deleting Resource - n1-apc2\n") output, returnVal = pcs(temp_cib, "stonith") self.assertEqual(returnVal, 0) ac(output, """\ n1-ipmi\t(stonith:fence_ilo):\tStopped n2-ipmi\t(stonith:fence_ilo):\tStopped Node: rh7-1 Level 1 - n1-ipmi Node: rh7-2 Level 1 - n2-ipmi """)
def testRoleCreateDelete(self): o, r = pcs(temp_cib, "acl role create role0 read") self.assertTrue(o.startswith("\nUsage: pcs acl role create...")) self.assertEqual(1, r) o, r = pcs(temp_cib, "acl role create role0 read //resources") self.assertTrue(o.startswith("\nUsage: pcs acl role create...")) self.assertEqual(1, r) o, r = pcs(temp_cib, "acl role create role0 read xpath") self.assertTrue(o.startswith("\nUsage: pcs acl role create...")) self.assertEqual(1, r) o, r = pcs(temp_cib, "acl role create role0 read id") self.assertTrue(o.startswith("\nUsage: pcs acl role create...")) self.assertEqual(1, r) o, r = pcs(temp_cib, "acl role create role0 readX xpath //resources") self.assertTrue(o.startswith("\nUsage: pcs acl role create...")) self.assertEqual(1, r) o, r = pcs(temp_cib, "acl role create role0 read xpathX //resources") self.assertTrue(o.startswith("\nUsage: pcs acl role create...")) self.assertEqual(1, r) o, r = pcs(temp_cib, "acl role create role0 description=test read") self.assertTrue(o.startswith("\nUsage: pcs acl role create...")) self.assertEqual(1, r) o, r = pcs( temp_cib, "acl role create role0 description=test read //resources" ) self.assertTrue(o.startswith("\nUsage: pcs acl role create...")) self.assertEqual(1, r) o, r = pcs( temp_cib, "acl role create role0 description=test read xpath" ) self.assertTrue(o.startswith("\nUsage: pcs acl role create...")) self.assertEqual(1, r) o, r = pcs(temp_cib, "acl role create role0 description=test read id") self.assertTrue(o.startswith("\nUsage: pcs acl role create...")) self.assertEqual(1, r) o, r = pcs(temp_cib, "acl role create role0 description=test readX xpath //resources" ) self.assertTrue(o.startswith("\nUsage: pcs acl role create...")) self.assertEqual(1, r) o, r = pcs(temp_cib, "acl role create role0 description=test read xpathX //resources" ) self.assertTrue(o.startswith("\nUsage: pcs acl role create...")) self.assertEqual(1, r) o, r = pcs(temp_cib, "acl role create role0 desc=test read") self.assertTrue(o.startswith("\nUsage: pcs acl role create...")) self.assertEqual(1, r) o, r = pcs(temp_cib, "acl role create role0 desc=test read //resources") self.assertTrue(o.startswith("\nUsage: pcs acl role create...")) self.assertEqual(1, r) o, r = pcs(temp_cib, "acl role create role0 desc=test read xpath") self.assertTrue(o.startswith("\nUsage: pcs acl role create...")) self.assertEqual(1, r) o, r = pcs(temp_cib, "acl role create role0 desc=test read id") self.assertTrue(o.startswith("\nUsage: pcs acl role create...")) self.assertEqual(1, r) o, r = pcs( temp_cib, "acl role create role0 desc=test readX xpath //resources" ) self.assertTrue(o.startswith("\nUsage: pcs acl role create...")) self.assertEqual(1, r) o, r = pcs( temp_cib, "acl role create role0 desc=test read xpathX //resources" ) self.assertTrue(o.startswith("\nUsage: pcs acl role create...")) self.assertEqual(1, r) o, r = pcs(temp_cib, "acl") ac(o, "ACLs are disabled, run 'pcs acl enable' to enable\n\n") self.assertEqual(0, r) o, r = pcs(temp_cib, "acl role create role0") ac(o, "") assert r == 0 o, r = pcs(temp_cib, "acl role create role0") ac(o, "Error: 'role0' already exists\n") assert r == 1 o, r = pcs(temp_cib, "acl role create role0d description='empty role'") ac(o, "") assert r == 0 o, r = pcs(temp_cib, "acl role create role1 read xpath /xpath/") ac(o, "") assert r == 0 o, r = pcs( temp_cib, "acl role create role2 description='with description' " "READ XPATH /xpath/" ) assert r == 0 ac(o, "") o, r = pcs( temp_cib, "acl role create role3 Read XPath /xpath_query/ wRiTe xpATH " "/xpath_query2/ deny xpath /xpath_query3/" ) assert r == 0 ac(o, "") o, r = pcs(temp_cib, "acl") ac(o, """\ ACLs are disabled, run 'pcs acl enable' to enable Role: role0 Role: role0d Description: empty role Role: role1 Permission: read xpath /xpath/ (role1-read) Role: role2 Description: with description Permission: read xpath /xpath/ (role2-read) Role: role3 Permission: read xpath /xpath_query/ (role3-read) Permission: write xpath /xpath_query2/ (role3-write) Permission: deny xpath /xpath_query3/ (role3-deny) """) assert r == 0 o, r = pcs(temp_cib, "acl role delete role2") assert r == 0 ac(o, "") o, r = pcs(temp_cib, "acl") ac(o, """\ ACLs are disabled, run 'pcs acl enable' to enable Role: role0 Role: role0d Description: empty role Role: role1 Permission: read xpath /xpath/ (role1-read) Role: role3 Permission: read xpath /xpath_query/ (role3-read) Permission: write xpath /xpath_query2/ (role3-write) Permission: deny xpath /xpath_query3/ (role3-deny) """) assert r == 0 o, r = pcs(temp_cib, "acl role delete role2") assert r == 1 ac(o, "Error: ACL role 'role2' does not exist\n") o, r = pcs(temp_cib, "acl role delete role1") assert r == 0 ac(o, "") o, r = pcs(temp_cib, "acl role remove role3") assert r == 0 ac(o, "") o, r = pcs(temp_cib, "acl role remove role0") assert r == 0 ac(o, "") o, r = pcs(temp_cib, "acl role remove role0d") assert r == 0 ac(o, "") o, r = pcs(temp_cib, "acl") ac(o, "ACLs are disabled, run 'pcs acl enable' to enable\n\n") assert r == 0
def testUserGroupCreateDelete(self): o,r = pcs("acl") assert r == 0 ac(o,"ACLs are disabled, run 'pcs acl enable' to enable\n\n") o,r = pcs("acl user create user1") ac(o,"") assert r == 0 o,r = pcs("acl user create user2") assert r == 0 ac(o,"") o,r = pcs("acl user create user1") assert r == 1 ac(o,"Error: user user1 already exists\n") o,r = pcs("acl group create group1") ac(o,"") assert r == 0 o,r = pcs("acl group create group2") assert r == 0 ac(o,"") o,r = pcs("acl group create group1") assert r == 1 ac(o,"Error: group group1 already exists\n") o,r = pcs("acl") ac(o,"""\ ACLs are disabled, run 'pcs acl enable' to enable User: user1 Roles: User: user2 Roles: Group: group1 Roles: Group: group2 Roles: """) assert r == 0 o,r = pcs("acl group delete user1") assert r == 1 ac(o,"Error: unable to find acl group: user1\n") o,r = pcs("acl") ac(o, """\ ACLs are disabled, run 'pcs acl enable' to enable User: user1 Roles: User: user2 Roles: Group: group1 Roles: Group: group2 Roles: """) assert r == 0 o,r = pcs("acl group delete group2") ac(o,"") assert r == 0 o,r = pcs("acl") ac(o, """\ ACLs are disabled, run 'pcs acl enable' to enable User: user1 Roles: User: user2 Roles: Group: group1 Roles: """) assert r == 0 o,r = pcs("acl group delete group1") ac(o,"") assert r == 0 o,r = pcs("acl") ac(o, """\ ACLs are disabled, run 'pcs acl enable' to enable User: user1 Roles: User: user2 Roles: """) assert r == 0 o,r = pcs("acl user delete user1") ac(o,"") assert r == 0 o,r = pcs("acl") ac(o, """\ ACLs are disabled, run 'pcs acl enable' to enable User: user2 Roles: """) assert r == 0 o,r = pcs("acl user delete user2") ac(o,"") assert r == 0 o,r = pcs("acl") assert r == 0 ac(o,"ACLs are disabled, run 'pcs acl enable' to enable\n\n")
def testPermissionAddDelete(self): o, r = pcs( temp_cib, "acl role create role1 read xpath /xpath1/ write xpath /xpath2/" ) ac(o, "") assert r == 0 o, r = pcs( temp_cib, "acl role create role2 read xpath /xpath3/ write xpath /xpath4/" ) ac(o, "") assert r == 0 o, r = pcs( temp_cib, "acl role create role3 read xpath /xpath5/ write xpath /xpath6/" ) ac(o, "") assert r == 0 o, r = pcs(temp_cib, "acl show") assert r == 0 ac(o, """\ ACLs are disabled, run 'pcs acl enable' to enable Role: role1 Permission: read xpath /xpath1/ (role1-read) Permission: write xpath /xpath2/ (role1-write) Role: role2 Permission: read xpath /xpath3/ (role2-read) Permission: write xpath /xpath4/ (role2-write) Role: role3 Permission: read xpath /xpath5/ (role3-read) Permission: write xpath /xpath6/ (role3-write) """) o, r = pcs(temp_cib, "acl permission add role1 deny xpath /myxpath1/") ac(o, "") assert r == 0 o, r = pcs(temp_cib, "acl permission add role4 deny xpath /myxpath2/") ac(o, "") assert r == 0 o, r = pcs(temp_cib, "acl show") assert r == 0 ac(o, """\ ACLs are disabled, run 'pcs acl enable' to enable Role: role1 Permission: read xpath /xpath1/ (role1-read) Permission: write xpath /xpath2/ (role1-write) Permission: deny xpath /myxpath1/ (role1-deny) Role: role2 Permission: read xpath /xpath3/ (role2-read) Permission: write xpath /xpath4/ (role2-write) Role: role3 Permission: read xpath /xpath5/ (role3-read) Permission: write xpath /xpath6/ (role3-write) Role: role4 Permission: deny xpath /myxpath2/ (role4-deny) """) o, r = pcs(temp_cib, "acl permission delete role4-deny") ac(o, "") assert r == 0 o, r = pcs(temp_cib, "acl permission delete role4-deny") ac(o, "Error: ACL permission 'role4-deny' does not exist\n") assert r == 1 o, r = pcs(temp_cib, "acl permission remove role4-deny") ac(o, "Error: ACL permission 'role4-deny' does not exist\n") assert r == 1 o, r = pcs(temp_cib, "acl show") assert r == 0 ac(o, """\ ACLs are disabled, run 'pcs acl enable' to enable Role: role1 Permission: read xpath /xpath1/ (role1-read) Permission: write xpath /xpath2/ (role1-write) Permission: deny xpath /myxpath1/ (role1-deny) Role: role2 Permission: read xpath /xpath3/ (role2-read) Permission: write xpath /xpath4/ (role2-write) Role: role3 Permission: read xpath /xpath5/ (role3-read) Permission: write xpath /xpath6/ (role3-write) Role: role4 """) o, r = pcs(temp_cib, "acl permission delete role3-read") ac(o, "") assert r == 0 o, r = pcs(temp_cib, "acl permission delete role3-write") ac(o, "") assert r == 0 o, r = pcs(temp_cib, "acl") ac(o, """\ ACLs are disabled, run 'pcs acl enable' to enable Role: role1 Permission: read xpath /xpath1/ (role1-read) Permission: write xpath /xpath2/ (role1-write) Permission: deny xpath /myxpath1/ (role1-deny) Role: role2 Permission: read xpath /xpath3/ (role2-read) Permission: write xpath /xpath4/ (role2-write) Role: role3 Role: role4 """) assert r == 0 o, r = pcs(temp_cib, "acl permission remove role1-read") ac(o, "") self.assertEqual(0, r) o, r = pcs(temp_cib, "acl permission remove role1-write") ac(o, "") self.assertEqual(0, r) o, r = pcs(temp_cib, "acl permission remove role1-deny") ac(o, "") self.assertEqual(0, r) o, r = pcs(temp_cib, "acl permission remove role2-read") ac(o, "") self.assertEqual(0, r) o, r = pcs(temp_cib, "acl permission remove role2-write") ac(o, "") self.assertEqual(0, r) o, r = pcs(temp_cib, "acl") ac(o, """\ ACLs are disabled, run 'pcs acl enable' to enable Role: role1 Role: role2 Role: role3 Role: role4 """) self.assertEqual(0, r) o, r = pcs(temp_cib, "acl permission add role1 read") self.assertTrue(o.startswith("\nUsage: pcs acl permission add...")) self.assertEqual(1, r) o, r = pcs(temp_cib, "acl permission add role1 read //resources") self.assertTrue(o.startswith("\nUsage: pcs acl permission add...")) self.assertEqual(1, r) o, r = pcs(temp_cib, "acl permission add role1 read xpath") self.assertTrue(o.startswith("\nUsage: pcs acl permission add...")) self.assertEqual(1, r) o, r = pcs(temp_cib, "acl permission add role1 read id") self.assertTrue(o.startswith("\nUsage: pcs acl permission add...")) self.assertEqual(1, r) o, r = pcs(temp_cib, "acl permission add role1 readX xpath //resources") self.assertTrue(o.startswith("\nUsage: pcs acl permission add...")) self.assertEqual(1, r) o, r = pcs(temp_cib, "acl permission add role1 read xpathX //resources") self.assertTrue(o.startswith("\nUsage: pcs acl permission add...")) self.assertEqual(1, r) o, r = pcs(temp_cib, "acl permission add role1 read id dummy read") self.assertTrue(o.startswith("\nUsage: pcs acl permission add...")) self.assertEqual(1, r) o, r = pcs( temp_cib, "acl permission add role1 read id dummy read //resources" ) self.assertTrue(o.startswith("\nUsage: pcs acl permission add...")) self.assertEqual(1, r) o, r = pcs( temp_cib, "acl permission add role1 read id dummy read xpath" ) self.assertTrue(o.startswith("\nUsage: pcs acl permission add...")) self.assertEqual(1, r) o, r = pcs(temp_cib, "acl permission add role1 read id dummy read id") self.assertTrue(o.startswith("\nUsage: pcs acl permission add...")) self.assertEqual(1, r) self.assert_pcs_fail( "acl permission add role1 read id dummy readX xpath //resources", stdout_start='\nUsage: pcs acl permission add...' ) self.assert_pcs_fail( "acl permission add role1 read id dummy read xpathX //resources", stdout_start='\nUsage: pcs acl permission add...' ) o, r = pcs(temp_cib, "acl") ac(o, """\ ACLs are disabled, run 'pcs acl enable' to enable Role: role1 Role: role2 Role: role3 Role: role4 """) self.assertEqual(0, r)
def testBadProperties(self): o,r = pcs(temp_cib, "property set xxxx=zzzz") self.assertEqual(r, 1) ac(o,"Error: unknown cluster property: 'xxxx', (use --force to override)\n") o, _ = pcs(temp_cib, "property list") ac(o, "Cluster Properties:\n") output, returnVal = pcs(temp_cib, "property set =5678 --force") ac(output, "Error: empty property name: '=5678'\n") self.assertEqual(returnVal, 1) o, _ = pcs(temp_cib, "property list") ac(o, "Cluster Properties:\n") output, returnVal = pcs(temp_cib, "property set =5678") ac(output, "Error: empty property name: '=5678'\n") self.assertEqual(returnVal, 1) o, _ = pcs(temp_cib, "property list") ac(o, "Cluster Properties:\n") output, returnVal = pcs(temp_cib, "property set bad_format") ac(output, "Error: invalid property format: 'bad_format'\n") self.assertEqual(returnVal, 1) o, _ = pcs(temp_cib, "property list") ac(o, "Cluster Properties:\n") output, returnVal = pcs(temp_cib, "property set bad_format --force") ac(output, "Error: invalid property format: 'bad_format'\n") self.assertEqual(returnVal, 1) o, _ = pcs(temp_cib, "property list") ac(o, "Cluster Properties:\n") o,r = pcs(temp_cib, "property unset zzzzz") self.assertEqual(r, 1) ac(o,"Error: can't remove property: 'zzzzz' that doesn't exist\n") o, _ = pcs(temp_cib, "property list") ac(o, "Cluster Properties:\n") o,r = pcs(temp_cib, "property unset zzzz --force") self.assertEqual(r, 0) ac(o,"") o, _ = pcs(temp_cib, "property list") ac(o, "Cluster Properties:\n")
def testUserGroupCreateDeleteWithRoles(self): o,r = pcs("acl role create role1 read xpath /xpath1/ write xpath /xpath2/") assert r == 0 ac(o,"") o,r = pcs("acl role create role2 deny xpath /xpath3/ deny xpath /xpath4/") assert r == 0 ac(o,"") o,r = pcs("acl role create role3 read xpath /xpath5/ read xpath /xpath6/") assert r == 0 ac(o,"") o, r = pcs("acl user create user1 roleX") ac(o, "Error: cannot find acl role: roleX\n") self.assertEqual(1, r) o, r = pcs("acl user create user1 role1 roleX") ac(o, "Error: cannot find acl role: roleX\n") self.assertEqual(1, r) o, r = pcs("acl group create group1 roleX") ac(o, "Error: cannot find acl role: roleX\n") self.assertEqual(1, r) o, r = pcs("acl group create group1 role1 roleX") ac(o, "Error: cannot find acl role: roleX\n") self.assertEqual(1, r) o, r = pcs("acl") ac(o, """\ ACLs are disabled, run 'pcs acl enable' to enable Role: role1 Permission: read xpath /xpath1/ (role1-read) Permission: write xpath /xpath2/ (role1-write) Role: role2 Permission: deny xpath /xpath3/ (role2-deny) Permission: deny xpath /xpath4/ (role2-deny-1) Role: role3 Permission: read xpath /xpath5/ (role3-read) Permission: read xpath /xpath6/ (role3-read-1) """) self.assertEqual(0, r) o,r = pcs("acl user create user1 role1 role2") assert r == 0 ac(o,"") o,r = pcs("acl group create group1 role1 role3") assert r == 0 ac(o,"") o,r = pcs("acl") assert r == 0 ac(o,"ACLs are disabled, run 'pcs acl enable' to enable\n\nUser: user1\n Roles: role1 role2\nGroup: group1\n Roles: role1 role3\nRole: role1\n Permission: read xpath /xpath1/ (role1-read)\n Permission: write xpath /xpath2/ (role1-write)\nRole: role2\n Permission: deny xpath /xpath3/ (role2-deny)\n Permission: deny xpath /xpath4/ (role2-deny-1)\nRole: role3\n Permission: read xpath /xpath5/ (role3-read)\n Permission: read xpath /xpath6/ (role3-read-1)\n") o,r = pcs("acl role create user1") assert r == 1 ac(o,"Error: 'user1' already exists\n") o,r = pcs("acl role create group1") assert r == 1 ac(o,"Error: 'group1' already exists\n") o,r = pcs("acl role create role1") assert r == 1 ac(o,"Error: 'role1' already exists\n") o,r = pcs("acl user create user1") assert r == 1 ac(o,"Error: user user1 already exists\n") o,r = pcs("acl user create group1") assert r == 1 ac(o,"Error: group1 already exists\n") o,r = pcs("acl user create role1") assert r == 1 ac(o,"Error: role1 already exists\n") o,r = pcs("acl group create user1") assert r == 1 ac(o,"Error: user1 already exists\n") o,r = pcs("acl group create group1") assert r == 1 ac(o,"Error: group group1 already exists\n") o,r = pcs("acl group create role1") assert r == 1 ac(o,"Error: role1 already exists\n") o,r = pcs("acl role assign role1 to noexist") assert r == 1 ac(o,"Error: cannot find user or group: noexist\n") o,r = pcs("acl role assign noexist to user1") assert r == 1 ac(o,"Error: cannot find role: noexist\n") o,r = pcs("acl role assign role3 to user1") assert r == 0 ac(o,"") o,r = pcs("acl") assert r == 0 ac(o,"ACLs are disabled, run 'pcs acl enable' to enable\n\nUser: user1\n Roles: role1 role2 role3\nGroup: group1\n Roles: role1 role3\nRole: role1\n Permission: read xpath /xpath1/ (role1-read)\n Permission: write xpath /xpath2/ (role1-write)\nRole: role2\n Permission: deny xpath /xpath3/ (role2-deny)\n Permission: deny xpath /xpath4/ (role2-deny-1)\nRole: role3\n Permission: read xpath /xpath5/ (role3-read)\n Permission: read xpath /xpath6/ (role3-read-1)\n") o,r = pcs("acl role unassign noexist from user1") assert r == 1 ac(o,"Error: cannot find role: noexist, assigned to user/group: user1\n") o,r = pcs("acl role unassign role3 from noexist") assert r == 1 ac(o,"Error: cannot find user or group: noexist\n") o,r = pcs("acl role unassign role3 from user1") assert r == 0 ac(o,"") o,r = pcs("acl") assert r == 0 ac(o,"ACLs are disabled, run 'pcs acl enable' to enable\n\nUser: user1\n Roles: role1 role2\nGroup: group1\n Roles: role1 role3\nRole: role1\n Permission: read xpath /xpath1/ (role1-read)\n Permission: write xpath /xpath2/ (role1-write)\nRole: role2\n Permission: deny xpath /xpath3/ (role2-deny)\n Permission: deny xpath /xpath4/ (role2-deny-1)\nRole: role3\n Permission: read xpath /xpath5/ (role3-read)\n Permission: read xpath /xpath6/ (role3-read-1)\n") o,r = pcs("acl role unassign role2 from user1") assert r == 0 ac(o,"") o,r = pcs("acl role unassign role1 from user1") assert r == 0 ac(o,"") o,r = pcs("acl") ac(o, """\ ACLs are disabled, run 'pcs acl enable' to enable User: user1 Roles: Group: group1 Roles: role1 role3 Role: role1 Permission: read xpath /xpath1/ (role1-read) Permission: write xpath /xpath2/ (role1-write) Role: role2 Permission: deny xpath /xpath3/ (role2-deny) Permission: deny xpath /xpath4/ (role2-deny-1) Role: role3 Permission: read xpath /xpath5/ (role3-read) Permission: read xpath /xpath6/ (role3-read-1) """) assert r == 0 o,r = pcs("acl role delete role3") assert r == 0 ac(o,"") o,r = pcs("acl") ac(o, """\ ACLs are disabled, run 'pcs acl enable' to enable User: user1 Roles: Group: group1 Roles: role1 Role: role1 Permission: read xpath /xpath1/ (role1-read) Permission: write xpath /xpath2/ (role1-write) Role: role2 Permission: deny xpath /xpath3/ (role2-deny) Permission: deny xpath /xpath4/ (role2-deny-1) """) assert r == 0 o,r = pcs("acl role assign role2 to user1") assert r == 0 ac(o,"") o,r = pcs("acl") assert r == 0 ac(o,"ACLs are disabled, run 'pcs acl enable' to enable\n\nUser: user1\n Roles: role2\nGroup: group1\n Roles: role1\nRole: role1\n Permission: read xpath /xpath1/ (role1-read)\n Permission: write xpath /xpath2/ (role1-write)\nRole: role2\n Permission: deny xpath /xpath3/ (role2-deny)\n Permission: deny xpath /xpath4/ (role2-deny-1)\n") o,r = pcs("acl role assign role1 user1") ac(o,"") assert r == 0 o,r = pcs("acl") ac(o, """\ ACLs are disabled, run 'pcs acl enable' to enable User: user1 Roles: role2 role1 Group: group1 Roles: role1 Role: role1 Permission: read xpath /xpath1/ (role1-read) Permission: write xpath /xpath2/ (role1-write) Role: role2 Permission: deny xpath /xpath3/ (role2-deny) Permission: deny xpath /xpath4/ (role2-deny-1) """) assert r == 0 o,r = pcs("acl role unassign role2 from user1 --autodelete") ac(o,"") assert r == 0 o,r = pcs("acl") ac(o, """\ ACLs are disabled, run 'pcs acl enable' to enable User: user1 Roles: role1 Group: group1 Roles: role1 Role: role1 Permission: read xpath /xpath1/ (role1-read) Permission: write xpath /xpath2/ (role1-write) Role: role2 Permission: deny xpath /xpath3/ (role2-deny) Permission: deny xpath /xpath4/ (role2-deny-1) """) assert r == 0 o,r = pcs("acl role unassign role1 from user1 --autodelete") ac(o,"") assert r == 0 o,r = pcs("acl") ac(o, """\ ACLs are disabled, run 'pcs acl enable' to enable Group: group1 Roles: role1 Role: role1 Permission: read xpath /xpath1/ (role1-read) Permission: write xpath /xpath2/ (role1-write) Role: role2 Permission: deny xpath /xpath3/ (role2-deny) Permission: deny xpath /xpath4/ (role2-deny-1) """) assert r == 0 o,r = pcs("acl user create user1 role1 role2") ac(o, "") assert r == 0 o,r = pcs("acl") ac(o, """\ ACLs are disabled, run 'pcs acl enable' to enable User: user1 Roles: role1 role2 Group: group1 Roles: role1 Role: role1 Permission: read xpath /xpath1/ (role1-read) Permission: write xpath /xpath2/ (role1-write) Role: role2 Permission: deny xpath /xpath3/ (role2-deny) Permission: deny xpath /xpath4/ (role2-deny-1) """) assert r == 0 o,r = pcs("acl role delete role1 --autodelete") ac(o,"") assert r == 0 o,r = pcs("acl") ac(o, """\ ACLs are disabled, run 'pcs acl enable' to enable User: user1 Roles: role2 Role: role2 Permission: deny xpath /xpath3/ (role2-deny) Permission: deny xpath /xpath4/ (role2-deny-1) """) assert r == 0
def testFenceLevels(self): output, returnVal = pcs(temp_cib, "stonith level remove 1 rh7-2 F1") assert returnVal == 1 ac( output, 'Error: unable to remove fencing level, fencing level for node: rh7-2, at level: 1, with device: F1 doesn\'t exist\n' ) output, returnVal = pcs(temp_cib, "stonith level") assert returnVal == 0 assert output == "" output, returnVal = pcs( temp_cib, "stonith create F1 fence_apc 'pcmk_host_list=nodea nodeb' ipaddr=ip login=lgn" ) assert returnVal == 0 ac(output, "") output, returnVal = pcs( temp_cib, "stonith create F2 fence_apc 'pcmk_host_list=nodea nodeb' ipaddr=ip login=lgn" ) assert returnVal == 0 ac(output, "") output, returnVal = pcs( temp_cib, "stonith create F3 fence_apc 'pcmk_host_list=nodea nodeb' ipaddr=ip login=lgn" ) assert returnVal == 0 ac(output, "") output, returnVal = pcs( temp_cib, "stonith create F4 fence_apc 'pcmk_host_list=nodea nodeb' ipaddr=ip login=lgn" ) assert returnVal == 0 ac(output, "") output, returnVal = pcs( temp_cib, "stonith create F5 fence_apc 'pcmk_host_list=nodea nodeb' ipaddr=ip login=lgn" ) assert returnVal == 0 ac(output, "") output, returnVal = pcs(temp_cib, "stonith level add NaN rh7-1 F3,F4") ac(output, "Error: invalid level 'NaN', use a positive integer\n") assert returnVal == 1 output, returnVal = pcs(temp_cib, "stonith level add -10 rh7-1 F3,F4") ac(output, "Error: invalid level '-10', use a positive integer\n") assert returnVal == 1 output, returnVal = pcs(temp_cib, "stonith level add 10abc rh7-1 F3,F4") ac(output, "Error: invalid level '10abc', use a positive integer\n") assert returnVal == 1 output, returnVal = pcs(temp_cib, "stonith level add 0 rh7-1 F3,F4") ac(output, "Error: invalid level '0', use a positive integer\n") assert returnVal == 1 output, returnVal = pcs(temp_cib, "stonith level add 000 rh7-1 F3,F4") ac(output, "Error: invalid level '000', use a positive integer\n") assert returnVal == 1 output, returnVal = pcs(temp_cib, "stonith level add 1 rh7-1 F3,F4") assert returnVal == 0 assert output == "" output, returnVal = pcs(temp_cib, "stonith level add 2 rh7-1 F5,F2") assert returnVal == 0 assert output == "" output, returnVal = pcs(temp_cib, "stonith level add 2 rh7-1 F5,F2") assert returnVal == 1 assert output == 'Error: unable to add fencing level, fencing level for node: rh7-1, at level: 2, with device: F5,F2 already exists\n', [ output ] output, returnVal = pcs(temp_cib, "stonith level add 1 rh7-2 F1") assert returnVal == 0 assert output == "" output, returnVal = pcs(temp_cib, "stonith level add 002 rh7-2 F2") assert returnVal == 0 assert output == "" output, returnVal = pcs(temp_cib, "stonith show") assert returnVal == 0 ac( output, """\ F1\t(stonith:fence_apc):\tStopped F2\t(stonith:fence_apc):\tStopped F3\t(stonith:fence_apc):\tStopped F4\t(stonith:fence_apc):\tStopped F5\t(stonith:fence_apc):\tStopped Node: rh7-1 Level 1 - F3,F4 Level 2 - F5,F2 Node: rh7-2 Level 1 - F1 Level 2 - F2 """) output, returnVal = pcs(temp_cib, "stonith level") assert returnVal == 0 assert output == ' Node: rh7-1\n Level 1 - F3,F4\n Level 2 - F5,F2\n Node: rh7-2\n Level 1 - F1\n Level 2 - F2\n', [ output ] output, returnVal = pcs(temp_cib, "stonith level remove 1 rh7-2 F1") assert returnVal == 0 assert output == "" output, returnVal = pcs(temp_cib, "stonith level remove 1 rh7-2 F1") assert returnVal == 1 assert output == 'Error: unable to remove fencing level, fencing level for node: rh7-2, at level: 1, with device: F1 doesn\'t exist\n', [ output ] output, returnVal = pcs(temp_cib, "stonith level") assert returnVal == 0 assert output == ' Node: rh7-1\n Level 1 - F3,F4\n Level 2 - F5,F2\n Node: rh7-2\n Level 2 - F2\n', [ output ] output, returnVal = pcs(temp_cib, "stonith level clear rh7-1a") assert returnVal == 0 output = "" output, returnVal = pcs(temp_cib, "stonith level") assert returnVal == 0 assert output == ' Node: rh7-1\n Level 1 - F3,F4\n Level 2 - F5,F2\n Node: rh7-2\n Level 2 - F2\n', [ output ] output, returnVal = pcs(temp_cib, "stonith level clear rh7-1") assert returnVal == 0 output = "" output, returnVal = pcs(temp_cib, "stonith level") assert returnVal == 0 assert output == ' Node: rh7-2\n Level 2 - F2\n', [output] output, returnVal = pcs(temp_cib, "stonith level add 2 rh7-1 F5,F2") assert returnVal == 0 assert output == "" output, returnVal = pcs(temp_cib, "stonith level add 1 rh7-1 F3,F4") assert returnVal == 0 assert output == "" output, returnVal = pcs(temp_cib, "stonith level") assert returnVal == 0 assert output == ' Node: rh7-1\n Level 1 - F3,F4\n Level 2 - F5,F2\n Node: rh7-2\n Level 2 - F2\n', [ output ] output, returnVal = pcs(temp_cib, "stonith level clear") assert returnVal == 0 assert output == "" output, returnVal = pcs(temp_cib, "stonith level") assert returnVal == 0 assert output == '', [output] output, returnVal = pcs(temp_cib, "stonith level 1") assert returnVal == 1 assert output.startswith("pcs stonith level: invalid option") # ac (output,"pcs stonith level: invalid option -- '1'\n\nUsage: pcs stonith level...\n level\n Lists all of the fencing levels currently configured\n\n level add <level> <node> <devices>\n Add the fencing level for the specified node with a comma separated\n list of devices (stonith ids) to attempt for that node at that level.\n Fence levels are attempted in numerical order (starting with 1) if\n a level succeeds (meaning all devices are successfully fenced in that\n level) then no other levels are tried, and the node is considered\n fenced.\n\n level remove <level> [node id] [devices id] ... [device id]\n Removes the fence level for the level, node and/or devices specified\n If no nodes or devices are specified then the fence level is removed\n\n level clear [node|device id(s)]\n Clears the fence levels on the node (or device id) specified or clears\n all fence levels if a node/device id is not specified. If more than\n one device id is specified they must be separated by a comma and no\n spaces. Example: pcs stonith level clear dev_a,dev_b\n\n level verify\n Verifies all fence devices and nodes specified in fence levels exist\n\n") output, returnVal = pcs(temp_cib, "stonith level abcd") assert returnVal == 1 assert output.startswith("pcs stonith level: invalid option") # assert output == "pcs stonith level: invalid option -- 'abcd'\n\nUsage: pcs stonith level...\n level\n Lists all of the fencing levels currently configured\n\n level add <level> <node> <devices>\n Add the fencing level for the specified node with a comma separated\n list of devices (stonith ids) to attempt for that node at that level.\n Fence levels are attempted in numerical order (starting with 1) if\n a level succeeds (meaning all devices are successfully fenced in that\n level) then no other levels are tried, and the node is considered\n fenced.\n\n level remove <level> [node id] [devices id] ... [device id]\n Removes the fence level for the level, node and/or devices specified\n If no nodes or devices are specified then the fence level is removed\n\n level clear [node|device id(s)]\n Clears the fence levels on the node (or device id) specified or clears\n all fence levels if a node/device id is not specified. If more than\n one device id is specified they must be separated by a comma and no\n spaces. Example: pcs stonith level clear dev_a,dev_b\n\n level verify\n Verifies all fence devices and nodes specified in fence levels exist\n\n",[output] output, returnVal = pcs(temp_cib, "stonith level add 1 rh7-1 blah") assert returnVal == 1 assert output == 'Error: blah is not a stonith id (use --force to override)\n' output, returnVal = pcs(temp_cib, "stonith level add 1 rh7-1 blah --force") assert returnVal == 0 assert output == '' output, returnVal = pcs(temp_cib, "stonith level") assert returnVal == 0 assert output == ' Node: rh7-1\n Level 1 - blah\n', [output] output, returnVal = pcs(temp_cib, "stonith level add 1 rh7-9 F1") assert returnVal == 1 assert output == 'Error: rh7-9 is not currently a node (use --force to override)\n' output, returnVal = pcs(temp_cib, "stonith level") assert returnVal == 0 assert output == ' Node: rh7-1\n Level 1 - blah\n', [output] output, returnVal = pcs(temp_cib, "stonith level add 1 rh7-9 F1 --force") assert returnVal == 0 assert output == '' output, returnVal = pcs(temp_cib, "stonith level") assert returnVal == 0 assert output == ' Node: rh7-1\n Level 1 - blah\n Node: rh7-9\n Level 1 - F1\n', [ output ] o, r = pcs(temp_cib, "stonith level remove 1") assert r == 0 assert o == "" o, r = pcs(temp_cib, "stonith level add 1 rh7-1 F1,F2") o, r = pcs(temp_cib, "stonith level add 2 rh7-1 F1,F2") o, r = pcs(temp_cib, "stonith level add 3 rh7-1 F1,F2") o, r = pcs(temp_cib, "stonith level add 4 rh7-1 F1,F2") o, r = pcs(temp_cib, "stonith level add 5 rh7-1 F1,F2") o, r = pcs(temp_cib, "stonith level add 1 rh7-2 F3") o, r = pcs(temp_cib, "stonith level add 2 rh7-2 F3") o, r = pcs(temp_cib, "stonith level remove 5 rh7-1") assert r == 0 assert o == "" o, r = pcs(temp_cib, "stonith level remove 4 rh7-1 F2") assert r == 1 assert o == "Error: unable to remove fencing level, fencing level for node: rh7-1, at level: 4, with device: F2 doesn't exist\n" o, r = pcs(temp_cib, "stonith level remove 4 rh7-1 F1") assert r == 1 assert o == "Error: unable to remove fencing level, fencing level for node: rh7-1, at level: 4, with device: F1 doesn't exist\n" o, r = pcs(temp_cib, "stonith level remove 4 rh7-1") assert r == 0 assert o == "" o, r = pcs(temp_cib, "stonith level remove 3") assert r == 0 assert o == "" o, r = pcs(temp_cib, "stonith level remove 2 F1 F2") assert r == 0 assert o == "" o, r = pcs(temp_cib, "stonith level") assert r == 0 ac( o, " Node: rh7-1\n Level 1 - F1,F2\n Node: rh7-2\n Level 1 - F3\n Level 2 - F3\n" ) o, r = pcs(temp_cib, "stonith level remove 2 F3") assert r == 0 assert o == "" o, r = pcs(temp_cib, "stonith level remove 1 rh7-1") assert r == 0 assert o == "" o, r = pcs(temp_cib, "stonith level") assert r == 0 ac(o, " Node: rh7-2\n Level 1 - F3\n") o, r = pcs(temp_cib, "stonith level add 1 rh7-1 F1,F2") assert r == 0 ac(o, "") o, r = pcs(temp_cib, "stonith level clear F4") assert r == 0 ac(o, "") o, r = pcs(temp_cib, "stonith level clear F2") assert r == 0 ac(o, "") o, r = pcs(temp_cib, "stonith level") assert r == 0 ac(o, " Node: rh7-1\n Level 1 - F1,F2\n Node: rh7-2\n Level 1 - F3\n") o, r = pcs(temp_cib, "stonith level clear F1,F2") assert r == 0 ac(o, "") o, r = pcs(temp_cib, "stonith level") assert r == 0 ac(o, " Node: rh7-2\n Level 1 - F3\n") o, r = pcs(temp_cib, "stonith level clear") o, r = pcs(temp_cib, "stonith level") assert r == 0 ac(o, "") o, r = pcs(temp_cib, "stonith level add 10 rh7-1 F1") assert r == 0 ac(o, "") o, r = pcs(temp_cib, "stonith level add 010 rh7-1 F2") assert r == 0 ac(o, "") o, r = pcs(temp_cib, "stonith level") assert r == 0 ac(o, """\ Node: rh7-1 Level 10 - F1 Level 10 - F2 """) o, r = pcs(temp_cib, "stonith level clear") assert r == 0 ac(o, "") o, r = pcs(temp_cib, "stonith level add 1 rh7-bad F1 --force") assert r == 0 ac(o, "") o, r = pcs(temp_cib, "stonith level verify") assert r == 1 ac(o, "Error: rh7-bad is not currently a node\n") o, r = pcs(temp_cib, "stonith level clear") o, r = pcs(temp_cib, "stonith level add 1 rh7-1 F1,FBad --force") assert r == 0 ac(o, "") o, r = pcs(temp_cib, "stonith level verify") assert r == 1 ac(o, "Error: FBad is not a stonith id\n") o, r = pcs(temp_cib, "cluster verify") assert r == 1 ac(o, "Error: FBad is not a stonith id\n")
def testFenceLevels(self): output, returnVal = pcs(temp_cib, "stonith level remove 1 rh7-2 F1") assert returnVal == 1 ac (output,'Error: unable to remove fencing level, fencing level for node: rh7-2, at level: 1, with device: F1 doesn\'t exist\n') output, returnVal = pcs(temp_cib, "stonith level") assert returnVal == 0 assert output == "" output, returnVal = pcs(temp_cib, "stonith create F1 fence_apc 'pcmk_host_list=nodea nodeb' ipaddr=ip login=lgn") assert returnVal == 0 ac(output,"") output, returnVal = pcs(temp_cib, "stonith create F2 fence_apc 'pcmk_host_list=nodea nodeb' ipaddr=ip login=lgn") assert returnVal == 0 ac(output,"") output, returnVal = pcs(temp_cib, "stonith create F3 fence_apc 'pcmk_host_list=nodea nodeb' ipaddr=ip login=lgn") assert returnVal == 0 ac(output,"") output, returnVal = pcs(temp_cib, "stonith create F4 fence_apc 'pcmk_host_list=nodea nodeb' ipaddr=ip login=lgn") assert returnVal == 0 ac(output,"") output, returnVal = pcs(temp_cib, "stonith create F5 fence_apc 'pcmk_host_list=nodea nodeb' ipaddr=ip login=lgn") assert returnVal == 0 ac(output,"") output, returnVal = pcs(temp_cib, "stonith level add NaN rh7-1 F3,F4") ac(output, "Error: invalid level 'NaN', use a positive integer\n") assert returnVal == 1 output, returnVal = pcs(temp_cib, "stonith level add -10 rh7-1 F3,F4") ac(output, "Error: invalid level '-10', use a positive integer\n") assert returnVal == 1 output, returnVal = pcs(temp_cib, "stonith level add 10abc rh7-1 F3,F4") ac(output, "Error: invalid level '10abc', use a positive integer\n") assert returnVal == 1 output, returnVal = pcs(temp_cib, "stonith level add 0 rh7-1 F3,F4") ac(output, "Error: invalid level '0', use a positive integer\n") assert returnVal == 1 output, returnVal = pcs(temp_cib, "stonith level add 000 rh7-1 F3,F4") ac(output, "Error: invalid level '000', use a positive integer\n") assert returnVal == 1 output, returnVal = pcs(temp_cib, "stonith level add 1 rh7-1 F3,F4") assert returnVal == 0 assert output == "" output, returnVal = pcs(temp_cib, "stonith level add 2 rh7-1 F5,F2") assert returnVal == 0 assert output == "" output, returnVal = pcs(temp_cib, "stonith level add 2 rh7-1 F5,F2") assert returnVal == 1 assert output == 'Error: unable to add fencing level, fencing level for node: rh7-1, at level: 2, with device: F5,F2 already exists\n',[output] output, returnVal = pcs(temp_cib, "stonith level add 1 rh7-2 F1") assert returnVal == 0 assert output == "" output, returnVal = pcs(temp_cib, "stonith level add 002 rh7-2 F2") assert returnVal == 0 assert output == "" output, returnVal = pcs(temp_cib, "stonith show") assert returnVal == 0 ac(output,"""\ F1\t(stonith:fence_apc):\tStopped F2\t(stonith:fence_apc):\tStopped F3\t(stonith:fence_apc):\tStopped F4\t(stonith:fence_apc):\tStopped F5\t(stonith:fence_apc):\tStopped Node: rh7-1 Level 1 - F3,F4 Level 2 - F5,F2 Node: rh7-2 Level 1 - F1 Level 2 - F2 """) output, returnVal = pcs(temp_cib, "stonith level") assert returnVal == 0 assert output == ' Node: rh7-1\n Level 1 - F3,F4\n Level 2 - F5,F2\n Node: rh7-2\n Level 1 - F1\n Level 2 - F2\n',[output] output, returnVal = pcs(temp_cib, "stonith level remove 1 rh7-2 F1") assert returnVal == 0 assert output == "" output, returnVal = pcs(temp_cib, "stonith level remove 1 rh7-2 F1") assert returnVal == 1 assert output == 'Error: unable to remove fencing level, fencing level for node: rh7-2, at level: 1, with device: F1 doesn\'t exist\n',[output] output, returnVal = pcs(temp_cib, "stonith level") assert returnVal == 0 assert output == ' Node: rh7-1\n Level 1 - F3,F4\n Level 2 - F5,F2\n Node: rh7-2\n Level 2 - F2\n',[output] output, returnVal = pcs(temp_cib, "stonith level clear rh7-1a") assert returnVal == 0 output = "" output, returnVal = pcs(temp_cib, "stonith level") assert returnVal == 0 assert output == ' Node: rh7-1\n Level 1 - F3,F4\n Level 2 - F5,F2\n Node: rh7-2\n Level 2 - F2\n',[output] output, returnVal = pcs(temp_cib, "stonith level clear rh7-1") assert returnVal == 0 output = "" output, returnVal = pcs(temp_cib, "stonith level") assert returnVal == 0 assert output == ' Node: rh7-2\n Level 2 - F2\n',[output] output, returnVal = pcs(temp_cib, "stonith level add 2 rh7-1 F5,F2") assert returnVal == 0 assert output == "" output, returnVal = pcs(temp_cib, "stonith level add 1 rh7-1 F3,F4") assert returnVal == 0 assert output == "" output, returnVal = pcs(temp_cib, "stonith level") assert returnVal == 0 assert output == ' Node: rh7-1\n Level 1 - F3,F4\n Level 2 - F5,F2\n Node: rh7-2\n Level 2 - F2\n',[output] output, returnVal = pcs(temp_cib, "stonith level clear") assert returnVal == 0 assert output == "" output, returnVal = pcs(temp_cib, "stonith level") assert returnVal == 0 assert output == '',[output] output, returnVal = pcs(temp_cib, "stonith level 1") assert returnVal == 1 assert output.startswith("pcs stonith level: invalid option") # ac (output,"pcs stonith level: invalid option -- '1'\n\nUsage: pcs stonith level...\n level\n Lists all of the fencing levels currently configured\n\n level add <level> <node> <devices>\n Add the fencing level for the specified node with a comma separated\n list of devices (stonith ids) to attempt for that node at that level.\n Fence levels are attempted in numerical order (starting with 1) if\n a level succeeds (meaning all devices are successfully fenced in that\n level) then no other levels are tried, and the node is considered\n fenced.\n\n level remove <level> [node id] [devices id] ... [device id]\n Removes the fence level for the level, node and/or devices specified\n If no nodes or devices are specified then the fence level is removed\n\n level clear [node|device id(s)]\n Clears the fence levels on the node (or device id) specified or clears\n all fence levels if a node/device id is not specified. If more than\n one device id is specified they must be separated by a comma and no\n spaces. Example: pcs stonith level clear dev_a,dev_b\n\n level verify\n Verifies all fence devices and nodes specified in fence levels exist\n\n") output, returnVal = pcs(temp_cib, "stonith level abcd") assert returnVal == 1 assert output.startswith("pcs stonith level: invalid option") # assert output == "pcs stonith level: invalid option -- 'abcd'\n\nUsage: pcs stonith level...\n level\n Lists all of the fencing levels currently configured\n\n level add <level> <node> <devices>\n Add the fencing level for the specified node with a comma separated\n list of devices (stonith ids) to attempt for that node at that level.\n Fence levels are attempted in numerical order (starting with 1) if\n a level succeeds (meaning all devices are successfully fenced in that\n level) then no other levels are tried, and the node is considered\n fenced.\n\n level remove <level> [node id] [devices id] ... [device id]\n Removes the fence level for the level, node and/or devices specified\n If no nodes or devices are specified then the fence level is removed\n\n level clear [node|device id(s)]\n Clears the fence levels on the node (or device id) specified or clears\n all fence levels if a node/device id is not specified. If more than\n one device id is specified they must be separated by a comma and no\n spaces. Example: pcs stonith level clear dev_a,dev_b\n\n level verify\n Verifies all fence devices and nodes specified in fence levels exist\n\n",[output] output, returnVal = pcs(temp_cib, "stonith level add 1 rh7-1 blah") assert returnVal == 1 assert output == 'Error: blah is not a stonith id (use --force to override)\n' output, returnVal = pcs(temp_cib, "stonith level add 1 rh7-1 blah --force") assert returnVal == 0 assert output == '' output, returnVal = pcs(temp_cib, "stonith level") assert returnVal == 0 assert output == ' Node: rh7-1\n Level 1 - blah\n',[output] output, returnVal = pcs(temp_cib, "stonith level add 1 rh7-9 F1") assert returnVal == 1 assert output == 'Error: rh7-9 is not currently a node (use --force to override)\n' output, returnVal = pcs(temp_cib, "stonith level") assert returnVal == 0 assert output == ' Node: rh7-1\n Level 1 - blah\n',[output] output, returnVal = pcs(temp_cib, "stonith level add 1 rh7-9 F1 --force") assert returnVal == 0 assert output == '' output, returnVal = pcs(temp_cib, "stonith level") assert returnVal == 0 assert output == ' Node: rh7-1\n Level 1 - blah\n Node: rh7-9\n Level 1 - F1\n',[output] o,r = pcs(temp_cib, "stonith level remove 1") assert r == 0 assert o == "" o,r = pcs(temp_cib, "stonith level add 1 rh7-1 F1,F2") o,r = pcs(temp_cib, "stonith level add 2 rh7-1 F1,F2") o,r = pcs(temp_cib, "stonith level add 3 rh7-1 F1,F2") o,r = pcs(temp_cib, "stonith level add 4 rh7-1 F1,F2") o,r = pcs(temp_cib, "stonith level add 5 rh7-1 F1,F2") o,r = pcs(temp_cib, "stonith level add 1 rh7-2 F3") o,r = pcs(temp_cib, "stonith level add 2 rh7-2 F3") o,r = pcs(temp_cib, "stonith level remove 5 rh7-1") assert r == 0 assert o == "" o,r = pcs(temp_cib, "stonith level remove 4 rh7-1 F2") assert r == 1 assert o == "Error: unable to remove fencing level, fencing level for node: rh7-1, at level: 4, with device: F2 doesn't exist\n" o,r = pcs(temp_cib, "stonith level remove 4 rh7-1 F1") assert r == 1 assert o == "Error: unable to remove fencing level, fencing level for node: rh7-1, at level: 4, with device: F1 doesn't exist\n" o,r = pcs(temp_cib, "stonith level remove 4 rh7-1") assert r == 0 assert o == "" o,r = pcs(temp_cib, "stonith level remove 3") assert r == 0 assert o == "" o,r = pcs(temp_cib, "stonith level remove 2 F1 F2") assert r == 0 assert o == "" o,r = pcs(temp_cib, "stonith level") assert r == 0 ac(o," Node: rh7-1\n Level 1 - F1,F2\n Node: rh7-2\n Level 1 - F3\n Level 2 - F3\n") o,r = pcs(temp_cib, "stonith level remove 2 F3") assert r == 0 assert o == "" o,r = pcs(temp_cib, "stonith level remove 1 rh7-1") assert r == 0 assert o == "" o,r = pcs(temp_cib, "stonith level") assert r == 0 ac(o," Node: rh7-2\n Level 1 - F3\n") o,r = pcs(temp_cib, "stonith level add 1 rh7-1 F1,F2") assert r == 0 ac(o,"") o,r = pcs(temp_cib, "stonith level clear F4") assert r == 0 ac(o,"") o,r = pcs(temp_cib, "stonith level clear F2") assert r == 0 ac(o,"") o,r = pcs(temp_cib, "stonith level") assert r == 0 ac(o," Node: rh7-1\n Level 1 - F1,F2\n Node: rh7-2\n Level 1 - F3\n") o,r = pcs(temp_cib, "stonith level clear F1,F2") assert r == 0 ac(o,"") o,r = pcs(temp_cib, "stonith level") assert r == 0 ac(o," Node: rh7-2\n Level 1 - F3\n") o,r = pcs(temp_cib, "stonith level clear") o,r = pcs(temp_cib, "stonith level") assert r == 0 ac(o,"") o,r = pcs(temp_cib, "stonith level add 10 rh7-1 F1") assert r == 0 ac(o,"") o,r = pcs(temp_cib, "stonith level add 010 rh7-1 F2") assert r == 0 ac(o,"") o,r = pcs(temp_cib, "stonith level") assert r == 0 ac(o, """\ Node: rh7-1 Level 10 - F1 Level 10 - F2 """) o,r = pcs(temp_cib, "stonith level clear") assert r == 0 ac(o,"") o,r = pcs(temp_cib, "stonith level add 1 rh7-bad F1 --force") assert r == 0 ac(o,"") o,r = pcs(temp_cib, "stonith level verify") assert r == 1 ac(o,"Error: rh7-bad is not currently a node\n") o,r = pcs(temp_cib, "stonith level clear") o,r = pcs(temp_cib, "stonith level add 1 rh7-1 F1,FBad --force") assert r == 0 ac(o,"") o,r = pcs(temp_cib, "stonith level verify") assert r == 1 ac(o,"Error: FBad is not a stonith id\n") o,r = pcs(temp_cib, "cluster verify") assert r == 1 ac(o,"Error: FBad is not a stonith id\n")
def testStonithDeleteRemovesLevel(self): output, returnVal = pcs(temp_cib, "stonith create n1-ipmi fence_ilo --force") self.assertEqual(returnVal, 0) ac(output, "") output, returnVal = pcs(temp_cib, "stonith create n2-ipmi fence_ilo --force") self.assertEqual(returnVal, 0) ac(output, "") output, returnVal = pcs(temp_cib, "stonith create n1-apc1 fence_apc --force") self.assertEqual(returnVal, 0) ac(output, "") output, returnVal = pcs(temp_cib, "stonith create n1-apc2 fence_apc --force") self.assertEqual(returnVal, 0) ac(output, "") output, returnVal = pcs(temp_cib, "stonith create n2-apc1 fence_apc --force") self.assertEqual(returnVal, 0) ac(output, "") output, returnVal = pcs(temp_cib, "stonith create n2-apc2 fence_apc --force") self.assertEqual(returnVal, 0) ac(output, "") output, returnVal = pcs(temp_cib, "stonith create n2-apc3 fence_apc --force") self.assertEqual(returnVal, 0) ac(output, "") output, returnVal = pcs(temp_cib, "stonith level add 1 rh7-1 n1-ipmi") self.assertEqual(returnVal, 0) ac(output, "") output, returnVal = pcs( temp_cib, "stonith level add 2 rh7-1 n1-apc1,n1-apc2,n2-apc2") self.assertEqual(returnVal, 0) ac(output, "") output, returnVal = pcs(temp_cib, "stonith level add 1 rh7-2 n2-ipmi") self.assertEqual(returnVal, 0) ac(output, "") output, returnVal = pcs( temp_cib, "stonith level add 2 rh7-2 n2-apc1,n2-apc2,n2-apc3") self.assertEqual(returnVal, 0) ac(output, "") output, returnVal = pcs(temp_cib, "stonith") self.assertEqual(returnVal, 0) ac( output, """\ n1-ipmi\t(stonith:fence_ilo):\tStopped n2-ipmi\t(stonith:fence_ilo):\tStopped n1-apc1\t(stonith:fence_apc):\tStopped n1-apc2\t(stonith:fence_apc):\tStopped n2-apc1\t(stonith:fence_apc):\tStopped n2-apc2\t(stonith:fence_apc):\tStopped n2-apc3\t(stonith:fence_apc):\tStopped Node: rh7-1 Level 1 - n1-ipmi Level 2 - n1-apc1,n1-apc2,n2-apc2 Node: rh7-2 Level 1 - n2-ipmi Level 2 - n2-apc1,n2-apc2,n2-apc3 """) output, returnVal = pcs(temp_cib, "stonith delete n2-apc2") self.assertEqual(returnVal, 0) ac(output, "Deleting Resource - n2-apc2\n") output, returnVal = pcs(temp_cib, "stonith") self.assertEqual(returnVal, 0) ac( output, """\ n1-ipmi\t(stonith:fence_ilo):\tStopped n2-ipmi\t(stonith:fence_ilo):\tStopped n1-apc1\t(stonith:fence_apc):\tStopped n1-apc2\t(stonith:fence_apc):\tStopped n2-apc1\t(stonith:fence_apc):\tStopped n2-apc3\t(stonith:fence_apc):\tStopped Node: rh7-1 Level 1 - n1-ipmi Level 2 - n1-apc1,n1-apc2 Node: rh7-2 Level 1 - n2-ipmi Level 2 - n2-apc1,n2-apc3 """) output, returnVal = pcs(temp_cib, "stonith delete n2-apc1") self.assertEqual(returnVal, 0) ac(output, "Deleting Resource - n2-apc1\n") output, returnVal = pcs(temp_cib, "stonith") self.assertEqual(returnVal, 0) ac( output, """\ n1-ipmi\t(stonith:fence_ilo):\tStopped n2-ipmi\t(stonith:fence_ilo):\tStopped n1-apc1\t(stonith:fence_apc):\tStopped n1-apc2\t(stonith:fence_apc):\tStopped n2-apc3\t(stonith:fence_apc):\tStopped Node: rh7-1 Level 1 - n1-ipmi Level 2 - n1-apc1,n1-apc2 Node: rh7-2 Level 1 - n2-ipmi Level 2 - n2-apc3 """) output, returnVal = pcs(temp_cib, "stonith delete n2-apc3") self.assertEqual(returnVal, 0) ac(output, "Deleting Resource - n2-apc3\n") output, returnVal = pcs(temp_cib, "stonith") self.assertEqual(returnVal, 0) ac( output, """\ n1-ipmi\t(stonith:fence_ilo):\tStopped n2-ipmi\t(stonith:fence_ilo):\tStopped n1-apc1\t(stonith:fence_apc):\tStopped n1-apc2\t(stonith:fence_apc):\tStopped Node: rh7-1 Level 1 - n1-ipmi Level 2 - n1-apc1,n1-apc2 Node: rh7-2 Level 1 - n2-ipmi """) output, returnVal = pcs(temp_cib, "resource delete n1-apc1") self.assertEqual(returnVal, 0) ac(output, "Deleting Resource - n1-apc1\n") output, returnVal = pcs(temp_cib, "stonith") self.assertEqual(returnVal, 0) ac( output, """\ n1-ipmi\t(stonith:fence_ilo):\tStopped n2-ipmi\t(stonith:fence_ilo):\tStopped n1-apc2\t(stonith:fence_apc):\tStopped Node: rh7-1 Level 1 - n1-ipmi Level 2 - n1-apc2 Node: rh7-2 Level 1 - n2-ipmi """) output, returnVal = pcs(temp_cib, "resource delete n1-apc2") self.assertEqual(returnVal, 0) ac(output, "Deleting Resource - n1-apc2\n") output, returnVal = pcs(temp_cib, "stonith") self.assertEqual(returnVal, 0) ac( output, """\ n1-ipmi\t(stonith:fence_ilo):\tStopped n2-ipmi\t(stonith:fence_ilo):\tStopped Node: rh7-1 Level 1 - n1-ipmi Node: rh7-2 Level 1 - n2-ipmi """)
def test_node_maintenance(self): output, _ = pcs(temp_cib, "property") expected_out = """\ Cluster Properties: """ ac(expected_out, output) output, returnVal = pcs(temp_cib, "node maintenance rh7-1") ac("", output) self.assertEqual(returnVal, 0) output, _ = pcs(temp_cib, "property") expected_out = """\ Cluster Properties: Node Attributes: rh7-1: maintenance=on """ ac(expected_out, output) output, returnVal = pcs(temp_cib, "node maintenance rh7-1") ac("", output) self.assertEqual(returnVal, 0) output, _ = pcs(temp_cib, "property") expected_out = """\ Cluster Properties: Node Attributes: rh7-1: maintenance=on """ ac(expected_out, output) output, returnVal = pcs(temp_cib, "node maintenance --all") ac("", output) self.assertEqual(returnVal, 0) output, _ = pcs(temp_cib, "property") expected_out = """\ Cluster Properties: Node Attributes: rh7-1: maintenance=on rh7-2: maintenance=on """ ac(expected_out, output) output, returnVal = pcs(temp_cib, "node unmaintenance rh7-2 rh7-1") ac("", output) self.assertEqual(returnVal, 0) output, _ = pcs(temp_cib, "property") expected_out = """\ Cluster Properties: """ ac(expected_out, output) output, returnVal = pcs(temp_cib, "node maintenance rh7-1 rh7-2") ac("", output) self.assertEqual(returnVal, 0) output, _ = pcs(temp_cib, "property") expected_out = """\ Cluster Properties: Node Attributes: rh7-1: maintenance=on rh7-2: maintenance=on """ ac(expected_out, output) output, returnVal = pcs(temp_cib, "node maintenance nonexistant-node") self.assertEqual(returnVal, 1) self.assertEqual( output, "Error: Node 'nonexistant-node' does not appear to exist in configuration\n" ) output, _ = pcs(temp_cib, "property") expected_out = """\ Cluster Properties: Node Attributes: rh7-1: maintenance=on rh7-2: maintenance=on """ ac(expected_out, output) output, returnVal = pcs(temp_cib, "node unmaintenance rh7-1") ac("", output) self.assertEqual(returnVal, 0) output, _ = pcs(temp_cib, "property") expected_out = """\ Cluster Properties: Node Attributes: rh7-2: maintenance=on """ ac(expected_out, output) output, returnVal = pcs(temp_cib, "node unmaintenance rh7-1") ac("", output) self.assertEqual(returnVal, 0) output, _ = pcs(temp_cib, "property") expected_out = """\ Cluster Properties: Node Attributes: rh7-2: maintenance=on """ ac(expected_out, output) output, returnVal = pcs(temp_cib, "node unmaintenance --all") ac("", output) self.assertEqual(returnVal, 0) output, _ = pcs(temp_cib, "property") expected_out = """\ Cluster Properties: """ ac(expected_out, output) output, returnVal = pcs(temp_cib, "node unmaintenance nonexistant-node") self.assertEqual(returnVal, 1) self.assertEqual( output, "Error: Node 'nonexistant-node' does not appear to exist in configuration\n" ) output, _ = pcs(temp_cib, "property") expected_out = """\ Cluster Properties: """ ac(expected_out, output)