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