Revision 56aa9fd5

b/daemons/ganeti-noded
472 472
    """
473 473
    return backend.NodeVolumes()
474 474

  
475
  @staticmethod
476
  def perspective_node_demote_from_mc(params):
477
    """Demote a node from the master candidate role.
478

  
479
    """
480
    return backend.DemoteFromMC()
481

  
482

  
475 483
  # cluster --------------------------
476 484

  
477 485
  @staticmethod
b/lib/backend.py
2051 2051
    return (False, str(err))
2052 2052

  
2053 2053

  
2054
def DemoteFromMC():
2055
  """Demotes the current node from master candidate role.
2056

  
2057
  """
2058
  # try to ensure we're not the master by mistake
2059
  master, myself = ssconf.GetMasterAndMyself()
2060
  if master == myself:
2061
    return (False, "ssconf status shows I'm the master node, will not demote")
2062
  pid_file = utils.DaemonPidFileName(constants.MASTERD_PID)
2063
  if utils.IsProcessAlive(utils.ReadPidFile(pid_file)):
2064
    return (False, "The master daemon is running, will not demote")
2065
  try:
2066
    utils.CreateBackup(constants.CLUSTER_CONF_FILE)
2067
  except EnvironmentError, err:
2068
    if err.errno != errno.ENOENT:
2069
      return (False, "Error while backing up cluster file: %s" % str(err))
2070
  utils.RemoveFile(constants.CLUSTER_CONF_FILE)
2071
  return (True, "Done")
2072

  
2073

  
2054 2074
class HooksRunner(object):
2055 2075
  """Hook runner.
2056 2076

  
b/lib/cmdlib.py
2157 2157
    if self.op.master_candidate is not None:
2158 2158
      node.master_candidate = self.op.master_candidate
2159 2159
      result.append(("master_candidate", str(self.op.master_candidate)))
2160
      if self.op.master_candidate == False:
2161
        rrc = self.rpc.call_node_demote_from_mc(node.name)
2162
        if (rrc.failed or not isinstance(rrc.data, (tuple, list))
2163
            or len(rrc.data) != 2):
2164
          self.LogWarning("Node rpc error: %s" % rrc.error)
2165
        elif not rrc.data[0]:
2166
          self.LogWarning("Node failed to demote itself: %s" % rrc.data[1])
2160 2167

  
2161 2168
    # this will trigger configuration file update, if needed
2162 2169
    self.cfg.Update(node)
b/lib/rpc.py
828 828
    """
829 829
    return self._MultiNodeCall(node_list, "node_volumes", [])
830 830

  
831
  def call_node_demote_from_mc(self, node):
832
    """Demote a node from the master candidate role.
833

  
834
    This is a single-node call.
835

  
836
    """
837
    return self._SingleNodeCall(node, "node_demote_from_mc", [])
838

  
831 839
  def call_test_delay(self, node_list, duration):
832 840
    """Sleep for a fixed time on given node(s).
833 841

  

Also available in: Unified diff