+list
FYI, interdiff:
diff --git a/test/py/testutils_ssh.py b/test/py/testutils_ssh.py
index 7d22508..a38304d 100644
--- a/test/py/testutils_ssh.py
+++ b/test/py/testutils_ssh.py
@@ -232,7 +232,7 @@ class FakeSshFileManager(object):
def GetAllNodesDiverse(self):
"""This returns all nodes in a diverse order.
- This will return all nodes, but makes sure that they ordered so that
+ This will return all nodes, but makes sure that they are ordered so
that
the list will contain in a round-robin fashion, a master candidate,
a potential master candidate, a normal node, then again a master
candidate, etc.
On Wed, 2 Dec 2015 at 19:09 Lisa Velden <[email protected]> wrote:
> On Tue, Nov 24, 2015 at 3:15 PM, 'Helga Velroyen' via ganeti-devel <
> [email protected]> wrote:
>
>> This patch adds a unit test where SSH keys of a diverse
>> set of nodes is removed. By 'diverse', we mean a set
>> consisting of master candidates, potential master
>> candidates, and normal nodes.
>>
>> It also fixes some minor bug that surfaced with that
>> test.
>>
>> Signed-off-by: Helga Velroyen <[email protected]>
>> ---
>> lib/backend.py | 4 +++-
>> test/py/ganeti.backend_unittest.py | 33
>> +++++++++++++++++++++++++++++++++
>> test/py/testutils_ssh.py | 37
>> +++++++++++++++++++++++++++++++++++++
>> 3 files changed, 73 insertions(+), 1 deletion(-)
>>
>> diff --git a/lib/backend.py b/lib/backend.py
>> index cfc6ec8..35f8c47 100644
>> --- a/lib/backend.py
>> +++ b/lib/backend.py
>> @@ -1930,7 +1930,9 @@ def RemoveNodeSshKeyBulk(node_list,
>> all_keys_to_remove = {}
>> if from_authorized_keys or from_public_keys:
>> for node_info in node_list:
>> -
>> + # Skip nodes that don't actually need any keys to be removed.
>> + if not (node_info.from_authorized_keys or
>> node_info.from_public_keys):
>> + continue
>> if keys_to_remove:
>> keys = keys_to_remove
>> else:
>> diff --git a/test/py/ganeti.backend_unittest.py b/test/py/
>> ganeti.backend_unittest.py
>> index 80845b2..94424ce 100755
>> --- a/test/py/ganeti.backend_unittest.py
>> +++ b/test/py/ganeti.backend_unittest.py
>> @@ -1509,6 +1509,39 @@ class
>> TestAddRemoveGenerateNodeSshKey(testutils.GanetiTestCase):
>> self.assertEqual(1,
>> len(self._ssh_file_manager.GetAuthorizedKeysOfNode(
>> node_info.name)))
>>
>> + def testRemoveDiverseNodesBulk(self):
>> + node_list = []
>> + key_map = {}
>> + for node_name, (node_uuid, node_key, is_potential_master_candidate,
>> + is_master_candidate, _) in \
>> + self._ssh_file_manager.GetAllNodesDiverse()[:3]:
>> + node_list.append(backend.SshRemoveNodeInfo(
>> + uuid=node_uuid,
>> + name=node_name,
>> + from_authorized_keys=is_master_candidate,
>> + from_public_keys=is_potential_master_candidate,
>> + clear_authorized_keys=True,
>> + clear_public_keys=True))
>> + key_map[node_name] = node_key
>> +
>> + backend.RemoveNodeSshKeyBulk(node_list,
>> + self._master_candidate_uuids,
>> + self._potential_master_candidates,
>> + pub_key_file=self._pub_key_file,
>> + ssconf_store=self._ssconf_mock,
>> + noded_cert_file=self.noded_cert_file,
>> + run_cmd_fn=self._run_cmd_mock)
>> +
>> + for node_info in node_list:
>> + self._ssh_file_manager.AssertNoNodeHasPublicKey(
>> + node_info.uuid, key_map[node_info.name])
>> + self._ssh_file_manager.AssertNodeSetOnlyHasAuthorizedKey(
>> + [node_info.name], key_map[node_info.name])
>> + self.assertEqual(0,
>> + len(self._ssh_file_manager.GetPublicKeysOfNode(node_info.name
>> )))
>> + self.assertEqual(1,
>> + len(self._ssh_file_manager.GetAuthorizedKeysOfNode(
>> node_info.name)))
>> +
>> def testDemoteMasterCandidateToPotentialMasterCandidate(self):
>> node_name, node_info =
>> self._ssh_file_manager.GetAllMasterCandidates()[0]
>> self._ssh_file_manager.SetOrAddNode(
>> diff --git a/test/py/testutils_ssh.py b/test/py/testutils_ssh.py
>> index 7dbb6fb..d00b3c4 100644
>> --- a/test/py/testutils_ssh.py
>> +++ b/test/py/testutils_ssh.py
>> @@ -203,6 +203,43 @@ class FakeSshFileManager(object):
>> in self._all_node_data.items() if not
>> node_info.is_master_candidate
>> and not node_info.is_potential_master_candidate]
>>
>> + def GetAllNodesDiverse(self):
>> + """This returns all nodes in a diverse order.
>> +
>> + This will return all nodes, but makes sure that they ordered so that
>>
>
> s/they ordered/they are ordered
>
>
>> + the list will contain in a round-robin fashion, a master candidate,
>> + a potential master candidate, a normal node, then again a master
>> + candidate, etc.
>> +
>> + """
>> + master_candidates = self.GetAllMasterCandidates()
>> + potential_master_candidates =
>> self.GetAllPurePotentialMasterCandidates()
>> + normal_nodes = self.GetAllNormalNodes()
>> +
>> + mixed_list = []
>> +
>> + i = 0
>> +
>> + assert (len(self._all_node_data) == len(master_candidates)
>> + + len(potential_master_candidates) + len(normal_nodes))
>> +
>> + while len(mixed_list) < len(self._all_node_data):
>> + if i % 3 == 0:
>> + if master_candidates:
>> + mixed_list.append(master_candidates[0])
>> + master_candidates = master_candidates[1:]
>> + elif i % 3 == 1:
>> + if potential_master_candidates:
>> + mixed_list.append(potential_master_candidates[0])
>> + potential_master_candidates = potential_master_candidates[1:]
>> + else: # i % 3 == 2
>> + if normal_nodes:
>> + mixed_list.append(normal_nodes[0])
>> + normal_nodes = normal_nodes[1:]
>> + i += 1
>> +
>> + return mixed_list
>> +
>> def GetPublicKeysOfNode(self, node):
>> return self._public_keys[node]
>>
>> --
>> 2.6.0.rc2.230.g3dd15c0
>>
>>
>
> Rest LGTM
>
> --
> Lisa Velden
> Software Engineer
> [email protected]
>
> Google Germany GmbH
> Dienerstraße 12
> 80331 München
>
> Geschäftsführer: Matthew Scott Sucherman, Paul Terence Manicle
> Registergericht und -nummer: Hamburg, HRB 86891
> Sitz der Gesellschaft: Hamburg
>
--
Helga Velroyen
Software Engineer
[email protected]
Google Germany GmbH
Dienerstraße 12
80331 München
Geschäftsführer: Matthew Scott Sucherman, Paul Terence Manicle
Registergericht und -nummer: Hamburg, HRB 86891
Sitz der Gesellschaft: Hamburg
Diese E-Mail ist vertraulich. Wenn Sie nicht der richtige Adressat sind,
leiten Sie diese bitte nicht weiter, informieren Sie den Absender und
löschen Sie die E-Mail und alle Anhänge. Vielen Dank.
This e-mail is confidential. If you are not the right addressee please do
not forward it, please inform the sender, and please erase this e-mail
including any attachments. Thanks.