Revision 840ad2ab

b/lib/cmdlib/node.py
42 42
  CheckInstanceState, INSTANCE_DOWN, GetUpdatedParams, \
43 43
  AdjustCandidatePool, CheckIAllocatorOrNode, LoadNodeEvacResult, \
44 44
  GetWantedNodes, MapInstanceLvsToNodes, RunPostHook, \
45
  FindFaultyInstanceDisks, CheckStorageTypeEnabled
45
  FindFaultyInstanceDisks, CheckStorageTypeEnabled, AddNodeCertToCandidateCerts
46 46

  
47 47

  
48 48
def _DecideSelfPromotion(lu, exceptions=None):
......
414 414
      self.context.AddNode(self.new_node, self.proc.GetECId())
415 415
      RedistributeAncillaryFiles(self)
416 416

  
417
    cluster = self.cfg.GetClusterInfo()
418
    if self.new_node.master_candidate:
419
      AddNodeCertToCandidateCerts(self, self.new_node.uuid, cluster)
420
      self.cfg.Update(cluster, feedback_fn)
421
    else:
422
      if self.new_node.uuid in cluster.candidate_certs:
423
        utils.RemoveNodeFromCandidateCerts(self.new_node.uuid,
424
                                           cluster.candidate_certs)
425
        self.cfg.Update(cluster, feedback_fn)
426

  
417 427

  
418 428
class LUNodeSetParams(LogicalUnit):
419 429
  """Modifies the parameters of a node.
......
1473 1483
      self.LogWarning("Errors encountered on the remote node while leaving"
1474 1484
                      " the cluster: %s", msg)
1475 1485

  
1486
    cluster = self.cfg.GetClusterInfo()
1487

  
1488
    # Remove node from candidate certificate list
1489
    if self.node.master_candidate:
1490
      utils.RemoveNodeFromCandidateCerts(self.node.uuid,
1491
                                         cluster.candidate_certs)
1492
      self.cfg.Update(cluster, feedback_fn)
1493

  
1476 1494
    # Remove node from our /etc/hosts
1477
    if self.cfg.GetClusterInfo().modify_etc_hosts:
1495
    if cluster.modify_etc_hosts:
1478 1496
      master_node_uuid = self.cfg.GetMasterNode()
1479 1497
      result = self.rpc.call_etc_hosts_modify(master_node_uuid,
1480 1498
                                              constants.ETC_HOSTS_REMOVE,
b/test/py/cmdlib/node_unittest.py
29 29
from ganeti import constants
30 30
from ganeti import objects
31 31
from ganeti import opcodes
32
from ganeti import errors
33 32

  
34 33
from testsupport import *
35 34

  
......
81 80
    # we can't know the node's UUID in advance, so use defaultdict here
82 81
    self.rpc.call_node_verify.return_value = \
83 82
      defaultdict(lambda: node_verify_result, {})
83
    self.rpc.call_node_crypto_tokens.return_value = \
84
      self.RpcResultsBuilder() \
85
        .CreateSuccessfulNodeResult(self.node_add,
86
            [(constants.CRYPTO_TYPE_SSL_DIGEST, "IA:MA:FA:KE:DI:GE:ST")])
84 87

  
85 88
  def testOvsNoLink(self):
86 89
    ndparams = {
......
106 109
    self.assertEqual(ndparams[constants.ND_OVS_LINK],
107 110
                     created_node.ndparams.get(constants.ND_OVS_LINK, None))
108 111

  
112
  def testAddCandidateCert(self):
113
    self.ExecOpCode(self.op_add)
114

  
115
    created_node = self.cfg.GetNodeInfoByName(self.op_add.node_name)
116
    cluster = self.cfg.GetClusterInfo()
117
    self.assertTrue(created_node.uuid in cluster.candidate_certs)
118

  
119
  def testReAddCandidateCert(self):
120
    cluster = self.cfg.GetClusterInfo()
121
    self.ExecOpCode(self.op_readd)
122
    created_node = self.cfg.GetNodeInfoByName(self.op_readd.node_name)
123
    self.assertTrue(created_node.uuid in cluster.candidate_certs)
124

  
125
  def testAddNoCandidateCert(self):
126
    op = self.CopyOpCode(self.op_add,
127
                         master_capable=False)
128
    self.ExecOpCode(op)
129

  
130
    created_node = self.cfg.GetNodeInfoByName(self.op_add.node_name)
131
    cluster = self.cfg.GetClusterInfo()
132
    self.assertFalse(created_node.uuid in cluster.candidate_certs)
133

  
109 134
  def testWithoutOVS(self):
110 135
    self.ExecOpCode(self.op_add)
111 136

  

Also available in: Unified diff