LGTM, thanks On Tue, Apr 28, 2015 at 4:30 PM, Helga Velroyen <[email protected]> wrote:
> On Tue, 28 Apr 2015 at 16:14 Hrvoje Ribicic <[email protected]> wrote: > >> On Thu, Apr 23, 2015 at 5:30 PM, 'Helga Velroyen' via ganeti-devel < >> [email protected]> wrote: >> >>> As suggested in a review of previous patches, this patch >>> uses named tuples instead of just tuples to manage node >>> information. >>> >>> Signed-off-by: Helga Velroyen <[email protected]> >>> --- >>> test/py/ganeti.backend_unittest.py | 68 >>> ++++++++++++++++++------------------- >>> test/py/testutils_ssh.py | 69 >>> +++++++++++++++++++++----------------- >>> 2 files changed, 71 insertions(+), 66 deletions(-) >>> >>> diff --git a/test/py/ganeti.backend_unittest.py b/test/py/ >>> ganeti.backend_unittest.py >>> index eddabbe..f2f4759 100755 >>> --- a/test/py/ganeti.backend_unittest.py >>> +++ b/test/py/ganeti.backend_unittest.py >>> @@ -1180,13 +1180,14 @@ class >>> TestAddRemoveGenerateNodeSshKey(testutils.GanetiTestCase): >>> >>> def testPromoteToMasterCandidate(self): >>> # Get one of the potential master candidates >>> - node_name, node_uuid, node_key, pot_mc, mc, master = \ >>> + node_name, node_info = \ >>> self._ssh_file_manager.GetAllPurePotentialMasterCandidates()[0] >>> # Update it's role to master candidate in the test data >>> - self._ssh_file_manager.SetOrAddNode(node_name, node_uuid, node_key, >>> - pot_mc, True, master) >>> + self._ssh_file_manager.SetOrAddNode( >>> + node_name, node_info.uuid, node_info.key, >>> + node_info.is_potential_master_candidate, True, >>> node_info.is_master) >>> >>> - backend.AddNodeSshKey(node_uuid, node_name, >>> + backend.AddNodeSshKey(node_info.uuid, node_name, >>> self._potential_master_candidates, >>> self._ssh_port_map, >>> to_authorized_keys=True, >>> @@ -1199,10 +1200,10 @@ class >>> TestAddRemoveGenerateNodeSshKey(testutils.GanetiTestCase): >>> >>> >>> self._ssh_file_manager.AssertPotentialMasterCandidatesOnlyHavePublicKey( >>> node_name) >>> - self._ssh_file_manager.AssertAllNodesHaveAuthorizedKey(node_key) >>> + >>> self._ssh_file_manager.AssertAllNodesHaveAuthorizedKey(node_info.key) >>> >>> def testRemoveMasterCandidate(self): >>> - (node_name, node_uuid, node_key, is_potential_master_candidate, >>> + node_name, (node_uuid, node_key, is_potential_master_candidate, >>> is_master_candidate, is_master) = \ >>> self._ssh_file_manager.GetAllMasterCandidates()[0] >>> >>> @@ -1227,11 +1228,10 @@ class >>> TestAddRemoveGenerateNodeSshKey(testutils.GanetiTestCase): >>> len(self._ssh_file_manager.GetAuthorizedKeysOfNode(node_name))) >>> >>> def testRemovePotentialMasterCandidate(self): >>> - (node_name, node_uuid, node_key, is_potential_master_candidate, >>> - is_master_candidate, is_master) = \ >>> + (node_name, node_info) = \ >>> self._ssh_file_manager.GetAllPurePotentialMasterCandidates()[0] >>> >>> - backend.RemoveNodeSshKey(node_uuid, node_name, >>> + backend.RemoveNodeSshKey(node_info.uuid, node_name, >>> self._master_candidate_uuids, >>> self._potential_master_candidates, >>> self._ssh_port_map, >>> @@ -1244,15 +1244,16 @@ class >>> TestAddRemoveGenerateNodeSshKey(testutils.GanetiTestCase): >>> noded_cert_file=self.noded_cert_file, >>> run_cmd_fn=self._run_cmd_mock) >>> >>> - self._ssh_file_manager.AssertNoNodeHasPublicKey(node_uuid, node_key) >>> - self._ssh_file_manager.AssertNoNodeHasAuthorizedKey(node_key) >>> + self._ssh_file_manager.AssertNoNodeHasPublicKey( >>> + node_info.uuid, node_info.key) >>> + self._ssh_file_manager.AssertNoNodeHasAuthorizedKey(node_info.key) >>> self.assertEqual(0, >>> len(self._ssh_file_manager.GetPublicKeysOfNode(node_name))) >>> self.assertEqual(0, >>> len(self._ssh_file_manager.GetAuthorizedKeysOfNode(node_name))) >>> >>> def testRemoveNormalNode(self): >>> - (node_name, node_uuid, node_key, is_potential_master_candidate, >>> + node_name, (node_uuid, node_key, is_potential_master_candidate, >>> is_master_candidate, is_master) = \ >>> >> >> By unpacking the named tuple fully, you are depriving yourself of many of >> its benefits. >> e.g. if a member of the tuple changes, and hopefully that means a name >> change if we are sane, this code will not warn about the difference, >> hopefully failing instead. >> >> I would keep the node_info here, for safety and consistency. >> > > Okay. > > >> >> >>> self._ssh_file_manager.GetAllNormalNodes()[0] >>> >>> @@ -1277,7 +1278,7 @@ class >>> TestAddRemoveGenerateNodeSshKey(testutils.GanetiTestCase): >>> len(self._ssh_file_manager.GetAuthorizedKeysOfNode(node_name))) >>> >>> def testDemoteMasterCandidateToPotentialMasterCandidate(self): >>> - (node_name, node_uuid, node_key, is_potential_master_candidate, >>> + node_name, (node_uuid, node_key, is_potential_master_candidate, >>> is_master_candidate, is_master) = \ >> >> >> Again. >> > > ACK > > >> >> >>> self._ssh_file_manager.GetAllMasterCandidates()[0] >>> self._ssh_file_manager.SetOrAddNode(node_name, node_uuid, node_key, >>> @@ -1302,14 +1303,13 @@ class >>> TestAddRemoveGenerateNodeSshKey(testutils.GanetiTestCase): >>> self._ssh_file_manager.AssertNoNodeHasAuthorizedKey(node_key) >>> >>> def testDemotePotentialMasterCandidateToNormalNode(self): >>> - (node_name, node_uuid, node_key, is_potential_master_candidate, >>> - is_master_candidate, is_master) = \ >>> + (node_name, node_info) = \ >>> self._ssh_file_manager.GetAllPurePotentialMasterCandidates()[0] >>> - self._ssh_file_manager.SetOrAddNode(node_name, node_uuid, node_key, >>> - False, is_master_candidate, >>> - is_master) >>> + self._ssh_file_manager.SetOrAddNode( >>> + node_name, node_info.uuid, node_info.key, False, >>> + node_info.is_master_candidate, node_info.is_master) >>> >>> - backend.RemoveNodeSshKey(node_uuid, node_name, >>> + backend.RemoveNodeSshKey(node_info.uuid, node_name, >>> self._master_candidate_uuids, >>> self._potential_master_candidates, >>> self._ssh_port_map, >>> @@ -1322,8 +1322,9 @@ class >>> TestAddRemoveGenerateNodeSshKey(testutils.GanetiTestCase): >>> noded_cert_file=self.noded_cert_file, >>> run_cmd_fn=self._run_cmd_mock) >>> >>> - self._ssh_file_manager.AssertNoNodeHasPublicKey(node_uuid, node_key) >>> - self._ssh_file_manager.AssertNoNodeHasAuthorizedKey(node_key) >>> + self._ssh_file_manager.AssertNoNodeHasPublicKey( >>> + node_info.uuid, node_info.key) >>> + self._ssh_file_manager.AssertNoNodeHasAuthorizedKey(node_info.key) >>> >>> def _GetReducedOnlineNodeList(self): >>> """'Randomly' mark some nodes as offline.""" >>> @@ -1361,13 +1362,12 @@ class >>> TestAddRemoveGenerateNodeSshKey(testutils.GanetiTestCase): >>> node, new_node_key)) >>> >>> def testRemoveKeyWithOfflineNodes(self): >>> - (node_name, node_uuid, node_key, is_potential_master_candidate, >>> - is_master_candidate, is_master) = \ >>> + (node_name, node_info) = \ >>> self._ssh_file_manager.GetAllMasterCandidates()[0] >>> self._online_nodes = self._GetReducedOnlineNodeList() >>> self._ssconf_mock.GetOnlineNodeList.return_value = >>> self._online_nodes >>> >>> - backend.RemoveNodeSshKey(node_uuid, node_name, >>> + backend.RemoveNodeSshKey(node_info.uuid, node_name, >>> self._master_candidate_uuids, >>> self._potential_master_candidates, >>> self._ssh_port_map, >>> @@ -1383,7 +1383,7 @@ class >>> TestAddRemoveGenerateNodeSshKey(testutils.GanetiTestCase): >>> offline_nodes = [node for node in self._all_nodes >>> if node not in self._online_nodes] >>> self._ssh_file_manager.AssertNodeSetOnlyHasAuthorizedKey( >>> - offline_nodes, node_key) >>> + offline_nodes, node_info.key) >>> >>> def testAddKeySuccessfullyOnNewNodeWithRetries(self): >>> """Tests adding a new node's key when updating that node takes >>> retries. >>> @@ -1469,8 +1469,7 @@ class >>> TestAddRemoveGenerateNodeSshKey(testutils.GanetiTestCase): >>> (new_node_name, new_node_uuid, new_node_key, is_master_candidate, >>> is_potential_master_candidate, is_master) = >>> self._GetNewMasterCandidate() >>> >>> - other_node_name, _, _, _, _, _ = self._ssh_file_manager \ >>> - .GetAllMasterCandidates()[0] >>> + other_node_name, _ = >>> self._ssh_file_manager.GetAllMasterCandidates()[0] >>> self._ssh_file_manager.SetMaxRetries( >>> other_node_name, constants.SSHS_MAX_RETRIES) >>> assert other_node_name != new_node_name >>> @@ -1504,8 +1503,7 @@ class >>> TestAddRemoveGenerateNodeSshKey(testutils.GanetiTestCase): >>> (new_node_name, new_node_uuid, new_node_key, is_master_candidate, >>> is_potential_master_candidate, is_master) = >>> self._GetNewMasterCandidate() >>> >>> - other_node_name, _, _, _, _, _ = self._ssh_file_manager \ >>> - .GetAllMasterCandidates()[0] >>> + other_node_name, _ = >>> self._ssh_file_manager.GetAllMasterCandidates()[0] >>> self._ssh_file_manager.SetMaxRetries( >>> other_node_name, constants.SSHS_MAX_RETRIES + 1) >>> assert other_node_name != new_node_name >>> @@ -1541,8 +1539,8 @@ class >>> TestAddRemoveGenerateNodeSshKey(testutils.GanetiTestCase): >>> >>> """ >>> all_master_candidates = >>> self._ssh_file_manager.GetAllMasterCandidates() >>> - node_name, node_uuid, node_key, _, _, _ = all_master_candidates[0] >>> - other_node_name, _, _, _, _, _ = all_master_candidates[1] >>> + node_name, (node_uuid, node_key, _, _, _) = all_master_candidates[0] >>> >> >> Again. >> > > ACK > > >> >> + other_node_name, _ = all_master_candidates[1] >>> assert node_name != self._master_node >>> assert other_node_name != self._master_node >>> assert node_name != other_node_name >>> @@ -1574,8 +1572,8 @@ class >>> TestAddRemoveGenerateNodeSshKey(testutils.GanetiTestCase): >>> >>> """ >>> all_master_candidates = >>> self._ssh_file_manager.GetAllMasterCandidates() >>> - node_name, node_uuid, node_key, _, _, _ = all_master_candidates[0] >>> - other_node_name, _, _, _, _, _ = all_master_candidates[1] >>> + node_name, (node_uuid, node_key, _, _, _) = all_master_candidates[0] >>> >> >> Again. >> > > ACK > > >> >> >>> + other_node_name, _ = all_master_candidates[1] >>> assert node_name != self._master_node >>> assert other_node_name != self._master_node >>> assert node_name != other_node_name >>> @@ -1603,7 +1601,7 @@ class >>> TestAddRemoveGenerateNodeSshKey(testutils.GanetiTestCase): >>> >>> """ >>> all_master_candidates = >>> self._ssh_file_manager.GetAllMasterCandidates() >>> - node_name, node_uuid, node_key, _, _, _ = all_master_candidates[0] >>> + node_name, (node_uuid, node_key, _, _, _) = all_master_candidates[0] >>> >> >> Again. >> > > ACK. > > >> >> >>> assert node_name != self._master_node >>> self._ssh_file_manager.SetMaxRetries( >>> node_name, constants.SSHS_MAX_RETRIES) >>> @@ -1633,7 +1631,7 @@ class >>> TestAddRemoveGenerateNodeSshKey(testutils.GanetiTestCase): >>> >>> """ >>> all_master_candidates = >>> self._ssh_file_manager.GetAllMasterCandidates() >>> - node_name, node_uuid, node_key, _, _, _ = all_master_candidates[0] >>> + node_name, (node_uuid, node_key, _, _, _) = all_master_candidates[0] >>> >> >> Again. >> > > ACK. > > >> >> >>> assert node_name != self._master_node >>> self._ssh_file_manager.SetMaxRetries( >>> node_name, constants.SSHS_MAX_RETRIES + 1) >>> diff --git a/test/py/testutils_ssh.py b/test/py/testutils_ssh.py >>> index 8735e7d..214b47b 100644 >>> --- a/test/py/testutils_ssh.py >>> +++ b/test/py/testutils_ssh.py >>> @@ -34,6 +34,8 @@ from ganeti import constants >>> from ganeti import pathutils >>> from ganeti import errors >>> >>> +from collections import namedtuple >>> + >>> >>> class FakeSshFileManager(object): >>> """Class which 'fakes' the lowest layer of SSH key manipulation. >>> @@ -52,7 +54,7 @@ class FakeSshFileManager(object): >>> """ >>> def __init__(self): >>> # Dictionary mapping node name to node properties. The properties >>> - # are a tuple of (node_uuid, ssh_key, is_potential_master_candidate, >>> + # are a named tuple of (node_uuid, ssh_key, >>> is_potential_master_candidate, >>> # is_master_candidate, is_master). >>> self._all_node_data = {} >>> # Dictionary emulating the authorized keys files of all nodes. The >>> @@ -75,9 +77,18 @@ class FakeSshFileManager(object): >>> # 'RunCommand' has already carried out. >>> self._retries = {} >>> >>> + _NodeInfo = namedtuple( >>> + "NodeInfo", >>> + ["uuid", >>> + "key", >>> + "is_potential_master_candidate", >>> + "is_master_candidate", >>> + "is_master"]) >>> + >>> def _SetMasterNodeName(self): >>> - self._master_node_name = [name for name, (_, _, _, _, master) >>> - in self._all_node_data.items() if >>> master][0] >>> + self._master_node_name = [name for name, node_info >>> + in self._all_node_data.items() >>> + if node_info.is_master][0] >>> >>> def GetMasterNodeName(self): >>> return self._master_node_name >>> @@ -97,21 +108,21 @@ class FakeSshFileManager(object): >>> mc = i < num_mcs >>> master = i == num_mcs / 2 >>> >>> - self._all_node_data[name] = (uuid, key, pot_mc, mc, master) >>> + self._all_node_data[name] = self._NodeInfo(uuid, key, pot_mc, mc, >>> master) >>> >>> def _FillPublicKeyOfOneNode(self, receiving_node_name): >>> - _, _, is_pot_mc, _, _ = self._all_node_data[receiving_node_name] >>> + node_info = self._all_node_data[receiving_node_name] >>> # Nodes which are not potential master candidates receive no keys >>> - if not is_pot_mc: >>> + if not node_info.is_potential_master_candidate: >>> return >>> - for uuid, key, pot_mc, _, _ in self._all_node_data.values(): >>> - if pot_mc: >>> - self._public_keys[receiving_node_name][uuid] = key >>> + for node_info in self._all_node_data.values(): >>> + if node_info.is_potential_master_candidate: >>> + self._public_keys[receiving_node_name][node_info.uuid] = >>> node_info.key >>> >>> def _FillAuthorizedKeyOfOneNode(self, receiving_node_name): >>> - for _, key, _, mc, _ in self._all_node_data.values(): >>> - if mc: >>> - self._authorized_keys[receiving_node_name].add(key) >>> + for node_info in self._all_node_data.values(): >>> + if node_info.is_master_candidate: >>> + self._authorized_keys[receiving_node_name].add(node_info.key) >>> >>> def InitAllNodes(self, num_nodes, num_pot_mcs, num_mcs): >>> """Initializes the entire state of the cluster wrt SSH keys. >>> @@ -159,33 +170,29 @@ class FakeSshFileManager(object): >>> return self._all_node_data.keys() >>> >>> def GetAllPotentialMasterCandidateNodeNames(self): >>> - return [name for name, (_, _, pot_mc, _, _) >>> - in self._all_node_data.items() if pot_mc] >>> + return [name for name, node_info >>> + in self._all_node_data.items() >>> + if node_info.is_potential_master_candidate] >>> >>> def GetAllMasterCandidateUuids(self): >>> - return [uuid for uuid, _, _, mc, _ >>> - in self._all_node_data.values() if mc] >>> - >>> - def GetAllPotentialMasterCandidates(self): >>> - return [(name, uuid, key, pot_mc, mc, master) >>> - for name, (uuid, key, pot_mc, mc, master) >>> - in self._all_node_data.items() if pot_mc] >>> + return [node_info.uuid for node_info >>> + in self._all_node_data.values() if >>> node_info.is_master_candidate] >>> >>> def GetAllPurePotentialMasterCandidates(self): >>> """Get the potential master candidates which are not master >>> candidates.""" >>> - return [(name, uuid, key, pot_mc, mc, master) >>> - for name, (uuid, key, pot_mc, mc, master) >>> - in self._all_node_data.items() if pot_mc and not mc] >>> + return [(name, node_info) for name, node_info >>> + in self._all_node_data.items() >>> + if node_info.is_potential_master_candidate and >>> + not node_info.is_master_candidate] >>> >>> def GetAllMasterCandidates(self): >>> - return [(name, uuid, key, pot_mc, mc, master) >>> - for name, (uuid, key, pot_mc, mc, master) >>> - in self._all_node_data.items() if mc] >>> + return [(name, node_info) for name, node_info >>> + in self._all_node_data.items() if >>> node_info.is_master_candidate] >>> >>> def GetAllNormalNodes(self): >>> - return [(name, uuid, key, pot_mc, mc, master) >>> - for name, (uuid, key, pot_mc, mc, master) >>> - in self._all_node_data.items() if not mc and not pot_mc] >>> + return [(name, node_info) for name, node_info >>> + in self._all_node_data.items() if not >>> node_info.is_master_candidate >>> + and not node_info.is_potential_master_candidate] >>> >>> def GetPublicKeysOfNode(self, node): >>> return self._public_keys[node] >>> @@ -214,7 +221,7 @@ class FakeSshFileManager(object): >>> @param master: whether the new node is the master >>> >>> """ >>> - self._all_node_data[name] = (uuid, key, pot_mc, mc, master) >>> + self._all_node_data[name] = self._NodeInfo(uuid, key, pot_mc, mc, >>> master) >>> if name not in self._authorized_keys: >>> self._authorized_keys[name] = set() >>> if mc: >>> -- >>> 2.2.0.rc0.207.ga3a616c >>> >>> > I admit I was too lazy to fix all in the first place. Here the interdiff > for all occurences: > > diff --git a/test/py/ganeti.backend_unittest.py b/test/py/ > ganeti.backend_unittest.py > index f2f4759..08f156a 100755 > --- a/test/py/ganeti.backend_unittest.py > +++ b/test/py/ganeti.backend_unittest.py > @@ -1253,11 +1253,9 @@ class > TestAddRemoveGenerateNodeSshKey(testutils.GanetiTestCase): > len(self._ssh_file_manager.GetAuthorizedKeysOfNode(node_name))) > > def testRemoveNormalNode(self): > - node_name, (node_uuid, node_key, is_potential_master_candidate, > - is_master_candidate, is_master) = \ > - self._ssh_file_manager.GetAllNormalNodes()[0] > + node_name, node_info = self._ssh_file_manager.GetAllNormalNodes()[0] > > - backend.RemoveNodeSshKey(node_uuid, node_name, > + backend.RemoveNodeSshKey(node_info.uuid, node_name, > self._master_candidate_uuids, > self._potential_master_candidates, > self._ssh_port_map, > @@ -1270,22 +1268,21 @@ class > TestAddRemoveGenerateNodeSshKey(testutils.GanetiTestCase): > noded_cert_file=self.noded_cert_file, > run_cmd_fn=self._run_cmd_mock) > > - self._ssh_file_manager.AssertNoNodeHasPublicKey(node_uuid, node_key) > - self._ssh_file_manager.AssertNoNodeHasAuthorizedKey(node_key) > + self._ssh_file_manager.AssertNoNodeHasPublicKey( > + node_info.uuid, node_info.key) > + self._ssh_file_manager.AssertNoNodeHasAuthorizedKey(node_info.key) > self.assertEqual(0, > len(self._ssh_file_manager.GetPublicKeysOfNode(node_name))) > self.assertEqual(0, > len(self._ssh_file_manager.GetAuthorizedKeysOfNode(node_name))) > > def testDemoteMasterCandidateToPotentialMasterCandidate(self): > - node_name, (node_uuid, node_key, is_potential_master_candidate, > - is_master_candidate, is_master) = \ > - self._ssh_file_manager.GetAllMasterCandidates()[0] > - self._ssh_file_manager.SetOrAddNode(node_name, node_uuid, node_key, > - is_potential_master_candidate, > False, > - is_master) > + node_name, node_info = > self._ssh_file_manager.GetAllMasterCandidates()[0] > + self._ssh_file_manager.SetOrAddNode( > + node_name, node_info.uuid, node_info.key, > + node_info.is_potential_master_candidate, False, > node_info.is_master) > > - backend.RemoveNodeSshKey(node_uuid, node_name, > + backend.RemoveNodeSshKey(node_info.uuid, node_name, > self._master_candidate_uuids, > self._potential_master_candidates, > self._ssh_port_map, > @@ -1300,7 +1297,7 @@ class > TestAddRemoveGenerateNodeSshKey(testutils.GanetiTestCase): > > > self._ssh_file_manager.AssertPotentialMasterCandidatesOnlyHavePublicKey( > node_name) > - self._ssh_file_manager.AssertNoNodeHasAuthorizedKey(node_key) > + self._ssh_file_manager.AssertNoNodeHasAuthorizedKey(node_info.key) > > def testDemotePotentialMasterCandidateToNormalNode(self): > (node_name, node_info) = \ > @@ -1539,7 +1536,7 @@ class > TestAddRemoveGenerateNodeSshKey(testutils.GanetiTestCase): > > """ > all_master_candidates = > self._ssh_file_manager.GetAllMasterCandidates() > - node_name, (node_uuid, node_key, _, _, _) = all_master_candidates[0] > + node_name, node_info = all_master_candidates[0] > other_node_name, _ = all_master_candidates[1] > assert node_name != self._master_node > assert other_node_name != self._master_node > @@ -1547,7 +1544,7 @@ class > TestAddRemoveGenerateNodeSshKey(testutils.GanetiTestCase): > self._ssh_file_manager.SetMaxRetries( > other_node_name, constants.SSHS_MAX_RETRIES) > > - backend.RemoveNodeSshKey(node_uuid, node_name, > + backend.RemoveNodeSshKey(node_info.uuid, node_name, > self._master_candidate_uuids, > self._potential_master_candidates, > self._ssh_port_map, > @@ -1560,8 +1557,9 @@ class > TestAddRemoveGenerateNodeSshKey(testutils.GanetiTestCase): > noded_cert_file=self.noded_cert_file, > run_cmd_fn=self._run_cmd_mock) > > - self._ssh_file_manager.AssertNoNodeHasPublicKey(node_uuid, node_key) > - self._ssh_file_manager.AssertNoNodeHasAuthorizedKey(node_key) > + self._ssh_file_manager.AssertNoNodeHasPublicKey( > + node_info.uuid, node_info.key) > + self._ssh_file_manager.AssertNoNodeHasAuthorizedKey(node_info.key) > > def testRemoveKeyFailedWithRetriesOnOtherNode(self): > """Test removing keys even if one of the old nodes fails even with > retries. > @@ -1572,7 +1570,7 @@ class > TestAddRemoveGenerateNodeSshKey(testutils.GanetiTestCase): > > """ > all_master_candidates = > self._ssh_file_manager.GetAllMasterCandidates() > - node_name, (node_uuid, node_key, _, _, _) = all_master_candidates[0] > + node_name, node_info = all_master_candidates[0] > other_node_name, _ = all_master_candidates[1] > assert node_name != self._master_node > assert other_node_name != self._master_node > @@ -1581,7 +1579,7 @@ class > TestAddRemoveGenerateNodeSshKey(testutils.GanetiTestCase): > other_node_name, constants.SSHS_MAX_RETRIES + 1) > > error_msgs = backend.RemoveNodeSshKey( > - node_uuid, node_name, self._master_candidate_uuids, > + node_info.uuid, node_name, self._master_candidate_uuids, > self._potential_master_candidates, self._ssh_port_map, > from_authorized_keys=True, from_public_keys=True, > clear_authorized_keys=True, clear_public_keys=True, > @@ -1589,7 +1587,7 @@ class > TestAddRemoveGenerateNodeSshKey(testutils.GanetiTestCase): > noded_cert_file=self.noded_cert_file, > run_cmd_fn=self._run_cmd_mock) > > self._ssh_file_manager.AssertNodeSetOnlyHasAuthorizedKey( > - [other_node_name], node_key) > + [other_node_name], node_info.key) > self.assertTrue([error_msg for (node, error_msg) in error_msgs > if node == other_node_name]) > > @@ -1601,12 +1599,12 @@ class > TestAddRemoveGenerateNodeSshKey(testutils.GanetiTestCase): > > """ > all_master_candidates = > self._ssh_file_manager.GetAllMasterCandidates() > - node_name, (node_uuid, node_key, _, _, _) = all_master_candidates[0] > + node_name, node_info = all_master_candidates[0] > assert node_name != self._master_node > self._ssh_file_manager.SetMaxRetries( > node_name, constants.SSHS_MAX_RETRIES) > > - backend.RemoveNodeSshKey(node_uuid, node_name, > + backend.RemoveNodeSshKey(node_info.uuid, node_name, > self._master_candidate_uuids, > self._potential_master_candidates, > self._ssh_port_map, > @@ -1619,8 +1617,9 @@ class > TestAddRemoveGenerateNodeSshKey(testutils.GanetiTestCase): > noded_cert_file=self.noded_cert_file, > run_cmd_fn=self._run_cmd_mock) > > - self._ssh_file_manager.AssertNoNodeHasPublicKey(node_uuid, node_key) > - self._ssh_file_manager.AssertNoNodeHasAuthorizedKey(node_key) > + self._ssh_file_manager.AssertNoNodeHasPublicKey( > + node_info.uuid, node_info.key) > + self._ssh_file_manager.AssertNoNodeHasAuthorizedKey(node_info.key) > > def testRemoveKeyFailedWithRetriesOnTargetNode(self): > """Test removing keys even if contacting the node fails with retries. > @@ -1631,13 +1630,13 @@ class > TestAddRemoveGenerateNodeSshKey(testutils.GanetiTestCase): > > """ > all_master_candidates = > self._ssh_file_manager.GetAllMasterCandidates() > - node_name, (node_uuid, node_key, _, _, _) = all_master_candidates[0] > + node_name, node_info = all_master_candidates[0] > assert node_name != self._master_node > self._ssh_file_manager.SetMaxRetries( > node_name, constants.SSHS_MAX_RETRIES + 1) > > error_msgs = backend.RemoveNodeSshKey( > - node_uuid, node_name, self._master_candidate_uuids, > + node_info.uuid, node_name, self._master_candidate_uuids, > self._potential_master_candidates, self._ssh_port_map, > from_authorized_keys=True, from_public_keys=True, > clear_authorized_keys=True, clear_public_keys=True, > @@ -1645,7 +1644,7 @@ class > TestAddRemoveGenerateNodeSshKey(testutils.GanetiTestCase): > noded_cert_file=self.noded_cert_file, > run_cmd_fn=self._run_cmd_mock) > > self._ssh_file_manager.AssertNodeSetOnlyHasAuthorizedKey( > - [node_name], node_key) > + [node_name], node_info.key) > self.assertTrue([error_msg for (node, error_msg) in error_msgs > if node == node_name]) > > >> >> Hrvoje Ribicic >> Ganeti Engineering >> Google Germany GmbH >> Dienerstr. 12, 80331, München >> >> Registergericht und -nummer: Hamburg, HRB 86891 >> Sitz der Gesellschaft: Hamburg >> Geschäftsführer: Graham Law, Christine Elizabeth Flores >> Steuernummer: 48/725/00206 >> Umsatzsteueridentifikationsnummer: DE813741370 >> > Hrvoje Ribicic Ganeti Engineering Google Germany GmbH Dienerstr. 12, 80331, München Registergericht und -nummer: Hamburg, HRB 86891 Sitz der Gesellschaft: Hamburg Geschäftsführer: Graham Law, Christine Elizabeth Flores Steuernummer: 48/725/00206 Umsatzsteueridentifikationsnummer: DE813741370
