FYI: interdiff due to the renamining:
diff --git a/test/py/cmdlib/node_unittest.py
b/test/py/cmdlib/node_unittest.py
index 2a02f9a..d0ab416 100644
--- a/test/py/cmdlib/node_unittest.py
+++ b/test/py/cmdlib/node_unittest.py
@@ -83,7 +83,7 @@ class TestLUNodeAdd(CmdlibTestCase):
self.rpc.call_node_crypto_tokens.return_value = \
self.RpcResultsBuilder() \
.CreateSuccessfulNodeResult(self.node_add,
- [(constants.CRYPTO_TYPE_SSL, "IA:MA:FA:KE:DI:GE:ST")])
+ [(constants.CRYPTO_TYPE_SSL_DIGEST, "IA:MA:FA:KE:DI:GE:ST")])
def testOvsNoLink(self):
ndparams = {
On Fri, Dec 20, 2013 at 10:27 AM, Hrvoje Ribicic <[email protected]> wrote:
> LGTM, thanks!
>
>
> On Thu, Dec 19, 2013 at 3:49 PM, Helga Velroyen <[email protected]> wrote:
>
>> This patch adds the certificate of a newly added or
>> readded master candidate node to the map of master candidate
>> certificates. It removes a master candidate node's certificate
>> digest from the candidate certificate map if the node is
>> removed from the cluster.
>>
>> Signed-off-by: Helga Velroyen <[email protected]>
>> ---
>> lib/cmdlib/node.py | 22 ++++++++++++++++++++--
>> test/py/cmdlib/node_unittest.py | 27 ++++++++++++++++++++++++++-
>> 2 files changed, 46 insertions(+), 3 deletions(-)
>>
>> diff --git a/lib/cmdlib/node.py b/lib/cmdlib/node.py
>> index 429f21d..09cd9c8 100644
>> --- a/lib/cmdlib/node.py
>> +++ b/lib/cmdlib/node.py
>> @@ -42,7 +42,7 @@ from ganeti.cmdlib.common import CheckParamsNotGlobal, \
>> CheckInstanceState, INSTANCE_DOWN, GetUpdatedParams, \
>> AdjustCandidatePool, CheckIAllocatorOrNode, LoadNodeEvacResult, \
>> GetWantedNodes, MapInstanceLvsToNodes, RunPostHook, \
>> - FindFaultyInstanceDisks, CheckStorageTypeEnabled
>> + FindFaultyInstanceDisks, CheckStorageTypeEnabled,
>> AddNodeCertToCandidateCerts
>>
>>
>> def _DecideSelfPromotion(lu, exceptions=None):
>> @@ -414,6 +414,16 @@ class LUNodeAdd(LogicalUnit):
>> self.context.AddNode(self.new_node, self.proc.GetECId())
>> RedistributeAncillaryFiles(self)
>>
>> + cluster = self.cfg.GetClusterInfo()
>> + if self.new_node.master_candidate:
>> + AddNodeCertToCandidateCerts(self, self.new_node.uuid, cluster)
>> + self.cfg.Update(cluster, feedback_fn)
>> + else:
>> + if self.new_node.uuid in cluster.candidate_certs:
>> + utils.RemoveNodeFromCandidateCerts(self.new_node.uuid,
>> + cluster.candidate_certs)
>> + self.cfg.Update(cluster, feedback_fn)
>> +
>>
>> class LUNodeSetParams(LogicalUnit):
>> """Modifies the parameters of a node.
>> @@ -1473,8 +1483,16 @@ class LUNodeRemove(LogicalUnit):
>> self.LogWarning("Errors encountered on the remote node while
>> leaving"
>> " the cluster: %s", msg)
>>
>> + cluster = self.cfg.GetClusterInfo()
>> +
>> + # Remove node from candidate certificate list
>> + if self.node.master_candidate:
>> + utils.RemoveNodeFromCandidateCerts(self.node.uuid,
>> + cluster.candidate_certs)
>> + self.cfg.Update(cluster, feedback_fn)
>> +
>> # Remove node from our /etc/hosts
>> - if self.cfg.GetClusterInfo().modify_etc_hosts:
>> + if cluster.modify_etc_hosts:
>> master_node_uuid = self.cfg.GetMasterNode()
>> result = self.rpc.call_etc_hosts_modify(master_node_uuid,
>> constants.ETC_HOSTS_REMOVE,
>> diff --git a/test/py/cmdlib/node_unittest.py
>> b/test/py/cmdlib/node_unittest.py
>> index dc8e124..2a02f9a 100644
>> --- a/test/py/cmdlib/node_unittest.py
>> +++ b/test/py/cmdlib/node_unittest.py
>> @@ -29,7 +29,6 @@ from ganeti import compat
>> from ganeti import constants
>> from ganeti import objects
>> from ganeti import opcodes
>> -from ganeti import errors
>>
>> from testsupport import *
>>
>> @@ -81,6 +80,10 @@ class TestLUNodeAdd(CmdlibTestCase):
>> # we can't know the node's UUID in advance, so use defaultdict here
>> self.rpc.call_node_verify.return_value = \
>> defaultdict(lambda: node_verify_result, {})
>> + self.rpc.call_node_crypto_tokens.return_value = \
>> + self.RpcResultsBuilder() \
>> + .CreateSuccessfulNodeResult(self.node_add,
>> + [(constants.CRYPTO_TYPE_SSL, "IA:MA:FA:KE:DI:GE:ST")])
>>
>> def testOvsNoLink(self):
>> ndparams = {
>> @@ -106,6 +109,28 @@ class TestLUNodeAdd(CmdlibTestCase):
>> self.assertEqual(ndparams[constants.ND_OVS_LINK],
>> created_node.ndparams.get(constants.ND_OVS_LINK,
>> None))
>>
>> + def testAddCandidateCert(self):
>> + self.ExecOpCode(self.op_add)
>> +
>> + created_node = self.cfg.GetNodeInfoByName(self.op_add.node_name)
>> + cluster = self.cfg.GetClusterInfo()
>> + self.assertTrue(created_node.uuid in cluster.candidate_certs)
>> +
>> + def testReAddCandidateCert(self):
>> + cluster = self.cfg.GetClusterInfo()
>> + self.ExecOpCode(self.op_readd)
>> + created_node = self.cfg.GetNodeInfoByName(self.op_readd.node_name)
>> + self.assertTrue(created_node.uuid in cluster.candidate_certs)
>> +
>> + def testAddNoCandidateCert(self):
>> + op = self.CopyOpCode(self.op_add,
>> + master_capable=False)
>> + self.ExecOpCode(op)
>> +
>> + created_node = self.cfg.GetNodeInfoByName(self.op_add.node_name)
>> + cluster = self.cfg.GetClusterInfo()
>> + self.assertFalse(created_node.uuid in cluster.candidate_certs)
>> +
>> def testWithoutOVS(self):
>> self.ExecOpCode(self.op_add)
>>
>> --
>> 1.8.5.1
>>
>>
>
--
--
Helga Velroyen | Software Engineer | [email protected] |
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