+ This can be either used for a 'soft' check (compared to CheckMaster,
+ which exits) or just for computing both at the same time.
+
+ The function does not handle any errors, these should be handled in
+ the caller (errors.ConfigurationError, errors.ResolverError).
+
+ @param ss: either a sstore.SimpleConfigReader or a
+ sstore.SimpleStore instance
+ @rtype: tuple
+ @return: a tuple (master node name, my own name)
+
+ """
+ if ss is None:
+ ss = SimpleStore()
+ return ss.GetMasterNode(), utils.HostInfo().name
+
+
+def CheckMaster(debug, ss=None):
+ """Checks the node setup.
+
+ If this is the master, the function will return. Otherwise it will
+ exit with an exit code based on the node status.
+
+ """
+ try:
+ master_name, myself = GetMasterAndMyself(ss)
+ 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 != master_name:
+ if debug:
+ sys.stderr.write("Not master, exiting.\n")
+ sys.exit(constants.EXIT_NOTMASTER)