- old_master)
-
- vote_list = GatherMasterVotes(node_list)
-
- if vote_list:
- voted_master = vote_list[0][0]
- if voted_master is None:
- raise errors.OpPrereqError("Cluster is inconsistent, most nodes did not"
- " respond.")
- elif voted_master != old_master:
- raise errors.OpPrereqError("I have wrong configuration, I believe the"
- " master is %s but the other nodes voted for"
- " %s. Please resync the configuration of"
- " this node." % (old_master, voted_master))
+ old_master, errors.ECODE_INVAL)
+
+ if new_master not in mc_list:
+ mc_no_master = [name for name in mc_list if name != old_master]
+ raise errors.OpPrereqError("This node is not among the nodes marked"
+ " as master candidates. Only these nodes"
+ " can become masters. Current list of"
+ " master candidates is:\n"
+ "%s" % ('\n'.join(mc_no_master)),
+ errors.ECODE_STATE)
+
+ if not no_voting:
+ vote_list = GatherMasterVotes(node_list)
+
+ if vote_list:
+ voted_master = vote_list[0][0]
+ if voted_master is None:
+ raise errors.OpPrereqError("Cluster is inconsistent, most nodes did"
+ " not respond.", errors.ECODE_ENVIRON)
+ elif voted_master != old_master:
+ raise errors.OpPrereqError("I have a wrong configuration, I believe"
+ " the master is %s but the other nodes"
+ " voted %s. Please resync the configuration"
+ " of this node." %
+ (old_master, voted_master),
+ errors.ECODE_STATE)