diff --git a/lib/constants.py b/lib/constants.py index 117b43cc34c6c8923c0653901358483ef3640ad2..63c4880b05d42459b6c8a3a6729bb2823ffd19a2 100644 --- a/lib/constants.py +++ b/lib/constants.py @@ -879,6 +879,20 @@ INSTST_ALL = frozenset([ INSTST_ERRORDOWN, ]) +# Node roles +NR_REGULAR = "R" +NR_MASTER = "M" +NR_MCANDIDATE = "C" +NR_DRAINED = "D" +NR_OFFLINE = "O" +NR_ALL = frozenset([ + NR_REGULAR, + NR_MASTER, + NR_MCANDIDATE, + NR_DRAINED, + NR_OFFLINE, + ]) + # SSL certificate check constants (in days) SSL_CERT_EXPIRATION_WARN = 30 SSL_CERT_EXPIRATION_ERROR = 7 diff --git a/lib/query.py b/lib/query.py index b185170eff71a09573aa904418414d11973e76f0..47a4d5c865901ff2d51ad0d625f389760968fff4 100644 --- a/lib/query.py +++ b/lib/query.py @@ -381,15 +381,15 @@ def _GetNodeRole(node, master_name): """ if node.name == master_name: - return "M" + return constants.NR_MASTER elif node.master_candidate: - return "C" + return constants.NR_MCANDIDATE elif node.drained: - return "D" + return constants.NR_DRAINED elif node.offline: - return "O" + return constants.NR_OFFLINE else: - return "R" + return constants.NR_REGULAR def _GetItemAttr(attr): diff --git a/lib/rapi/rlib2.py b/lib/rapi/rlib2.py index 6504ab2847e1618df0dbeb6ba83f41b677d38131..70d8215d01b06c1fbb15ad7761c432e27c6824dc 100644 --- a/lib/rapi/rlib2.py +++ b/lib/rapi/rlib2.py @@ -86,13 +86,15 @@ _NR_OFFLINE = "offline" _NR_REGULAR = "regular" _NR_MAP = { - "M": _NR_MASTER, - "C": _NR_MASTER_CANDIATE, - "D": _NR_DRAINED, - "O": _NR_OFFLINE, - "R": _NR_REGULAR, + constants.NR_MASTER: _NR_MASTER, + constants.NR_MCANDIDATE: _NR_MASTER_CANDIATE, + constants.NR_DRAINED: _NR_DRAINED, + constants.NR_OFFLINE: _NR_OFFLINE, + constants.NR_REGULAR: _NR_REGULAR, } +assert frozenset(_NR_MAP.keys()) == constants.NR_ALL + # Request data version field _REQ_DATA_VERSION = "__version__" diff --git a/test/ganeti.query_unittest.py b/test/ganeti.query_unittest.py index 8994425a1d4480054427572c9be0406bca84e0fe..8039435a84c3aa27a02c6d38cfe52716f61f6968 100755 --- a/test/ganeti.query_unittest.py +++ b/test/ganeti.query_unittest.py @@ -275,25 +275,26 @@ class TestQuery(unittest.TestCase): class TestGetNodeRole(unittest.TestCase): - def testMaster(self): - node = objects.Node(name="node1") - self.assertEqual(query._GetNodeRole(node, "node1"), "M") - - def testMasterCandidate(self): - node = objects.Node(name="node1", master_candidate=True) - self.assertEqual(query._GetNodeRole(node, "master"), "C") - - def testRegular(self): - node = objects.Node(name="node1") - self.assertEqual(query._GetNodeRole(node, "master"), "R") + def test(self): + tested_role = set() + + checks = [ + (constants.NR_MASTER, "node1", objects.Node(name="node1")), + (constants.NR_MCANDIDATE, "master", + objects.Node(name="node1", master_candidate=True)), + (constants.NR_REGULAR, "master", objects.Node(name="node1")), + (constants.NR_DRAINED, "master", + objects.Node(name="node1", drained=True)), + (constants.NR_OFFLINE, + "master", objects.Node(name="node1", offline=True)), + ] - def testDrained(self): - node = objects.Node(name="node1", drained=True) - self.assertEqual(query._GetNodeRole(node, "master"), "D") + for (role, master_name, node) in checks: + result = query._GetNodeRole(node, master_name) + self.assertEqual(result, role) + tested_role.add(result) - def testOffline(self): - node = objects.Node(name="node1", offline=True) - self.assertEqual(query._GetNodeRole(node, "master"), "O") + self.assertEqual(tested_role, constants.NR_ALL) class TestNodeQuery(unittest.TestCase):