diff --git a/lib/constants.py b/lib/constants.py index 38a329119183718a2dafbcf5c85a6b9751f25e5b..91ce86ba99db540dd34e9618670bd6de345c15ec 100644 --- a/lib/constants.py +++ b/lib/constants.py @@ -279,6 +279,7 @@ EXIT_NOTCLUSTER = 5 EXIT_NOTMASTER = 11 EXIT_NODESETUP_ERROR = 12 EXIT_CONFIRMATION = 13 # need user confirmation +EXIT_NOTCANDIDATE = 14 # tags TAG_CLUSTER = "cluster" diff --git a/lib/ssconf.py b/lib/ssconf.py index 874b208bfedf2ebcfa1c2ca01f9fc4050f0a219d..8ee84c112a7ae9da85f72b15350cb932100f6302 100644 --- a/lib/ssconf.py +++ b/lib/ssconf.py @@ -290,3 +290,29 @@ def CheckMaster(debug, ss=None): if debug: sys.stderr.write("Not master, exiting.\n") sys.exit(constants.EXIT_NOTMASTER) + + +def CheckMasterCandidate(debug, ss=None): + """Checks the node setup. + + If this is a master candidate, the function will return. Otherwise it will + exit with an exit code based on the node status. + + """ + try: + if ss is None: + ss = SimpleStore() + myself = utils.HostInfo().name + candidates = ss.GetMasterCandidates() + except errors.ConfigurationError, err: + print "Cluster configuration incomplete: '%s'" % str(err) + sys.exit(constants.EXIT_NODESETUP_ERROR) + except errors.ResolverError, err: + sys.stderr.write("Cannot resolve my own name (%s)\n" % err.args[0]) + sys.exit(constants.EXIT_NODESETUP_ERROR) + + if myself not in candidates: + if debug: + sys.stderr.write("Not master candidate, exiting.\n") + sys.exit(constants.EXIT_NOTCANDIDATE) +