Revision bf6929a2

b/lib/cmdlib.py
528 528
                             (result.cmd, result.exit_code, result.output))
529 529

  
530 530

  
531
def _CheckInstanceBridgesExist(instance):
532
  """Check that the brigdes needed by an instance exist.
533

  
534
  """
535
  # check bridges existance
536
  brlist = [nic.bridge for nic in instance.nics]
537
  if not rpc.call_bridges_exist(instance.primary_node, brlist):
538
    raise errors.OpPrereqError("one or more target bridges %s does not"
539
                               " exist on destination node '%s'" %
540
                               (brlist, instance.primary_node))
541

  
542

  
531 543
class LUInitCluster(LogicalUnit):
532 544
  """Initialise the cluster.
533 545

  
......
1934 1946
                                 self.op.instance_name)
1935 1947

  
1936 1948
    # check bridges existance
1937
    brlist = [nic.bridge for nic in instance.nics]
1938
    if not rpc.call_bridges_exist(instance.primary_node, brlist):
1939
      raise errors.OpPrereqError("one or more target bridges %s does not"
1940
                                 " exist on destination node '%s'" %
1941
                                 (brlist, instance.primary_node))
1949
    _CheckInstanceBridgesExist(instance)
1942 1950

  
1943 1951
    self.instance = instance
1944 1952
    self.op.instance_name = instance.name
......
1976 1984
    self.cfg.MarkInstanceUp(instance.name)
1977 1985

  
1978 1986

  
1987
class LURebootInstance(LogicalUnit):
1988
  """Reboot an instance.
1989

  
1990
  """
1991
  HPATH = "instance-reboot"
1992
  HTYPE = constants.HTYPE_INSTANCE
1993
  _OP_REQP = ["instance_name", "ignore_secondaries", "reboot_type"]
1994

  
1995
  def BuildHooksEnv(self):
1996
    """Build hooks env.
1997

  
1998
    This runs on master, primary and secondary nodes of the instance.
1999

  
2000
    """
2001
    env = {
2002
      "IGNORE_SECONDARIES": self.op.ignore_secondaries,
2003
      }
2004
    env.update(_BuildInstanceHookEnvByObject(self.instance))
2005
    nl = ([self.sstore.GetMasterNode(), self.instance.primary_node] +
2006
          list(self.instance.secondary_nodes))
2007
    return env, nl, nl
2008

  
2009
  def CheckPrereq(self):
2010
    """Check prerequisites.
2011

  
2012
    This checks that the instance is in the cluster.
2013

  
2014
    """
2015
    instance = self.cfg.GetInstanceInfo(
2016
      self.cfg.ExpandInstanceName(self.op.instance_name))
2017
    if instance is None:
2018
      raise errors.OpPrereqError("Instance '%s' not known" %
2019
                                 self.op.instance_name)
2020

  
2021
    # check bridges existance
2022
    _CheckInstanceBridgesExist(instance)
2023

  
2024
    self.instance = instance
2025
    self.op.instance_name = instance.name
2026

  
2027
  def Exec(self, feedback_fn):
2028
    """Reboot the instance.
2029

  
2030
    """
2031
    instance = self.instance
2032
    ignore_secondaries = self.op.ignore_secondaries
2033
    reboot_type = self.op.reboot_type
2034
    extra_args = getattr(self.op, "extra_args", "")
2035

  
2036
    node_current = instance.primary_node
2037

  
2038
    if reboot_type not in [constants.INSTANCE_REBOOT_SOFT,
2039
                           constants.INSTANCE_REBOOT_HARD,
2040
                           constants.INSTANCE_REBOOT_FULL]:
2041
      raise errors.ParameterError("reboot type not in [%s, %s, %s]" %
2042
                                  (constants.INSTANCE_REBOOT_SOFT,
2043
                                   constants.INSTANCE_REBOOT_HARD,
2044
                                   constants.INSTANCE_REBOOT_FULL))
2045

  
2046
    if reboot_type in [constants.INSTANCE_REBOOT_SOFT,
2047
                       constants.INSTANCE_REBOOT_HARD]:
2048
      if not rpc.call_instance_reboot(node_current, instance,
2049
                                      reboot_type, extra_args):
2050
        raise errors.OpExecError("Could not reboot instance")
2051
    else:
2052
      if not rpc.call_instance_shutdown(node_current, instance):
2053
        raise errors.OpExecError("could not shutdown instance for full reboot")
2054
      _ShutdownInstanceDisks(instance, self.cfg)
2055
      _StartInstanceDisks(self.cfg, instance, ignore_secondaries)
2056
      if not rpc.call_instance_start(node_current, instance, extra_args):
2057
        _ShutdownInstanceDisks(instance, self.cfg)
2058
        raise errors.OpExecError("Could not start instance for full reboot")
2059

  
2060
    self.cfg.MarkInstanceUp(instance.name)
2061

  
2062

  
1979 2063
class LUShutdownInstance(LogicalUnit):
1980 2064
  """Shutdown an instance.
1981 2065

  
b/lib/mcpu.py
63 63
    opcodes.OpActivateInstanceDisks: cmdlib.LUActivateInstanceDisks,
64 64
    opcodes.OpShutdownInstance: cmdlib.LUShutdownInstance,
65 65
    opcodes.OpStartupInstance: cmdlib.LUStartupInstance,
66
    opcodes.OpRebootInstance: cmdlib.LURebootInstance,
66 67
    opcodes.OpDeactivateInstanceDisks: cmdlib.LUDeactivateInstanceDisks,
67 68
    opcodes.OpAddMDDRBDComponent: cmdlib.LUAddMDDRBDComponent,
68 69
    opcodes.OpRemoveMDDRBDComponent: cmdlib.LURemoveMDDRBDComponent,
b/lib/opcodes.py
171 171
  __slots__ = ["instance_name"]
172 172

  
173 173

  
174
class OpRebootInstance(OpCode):
175
  """Reboot an instance."""
176
  OP_ID = "OP_INSTANCE_STARTUP"
177
  __slots__ = ["instance_name", "reboot_type", "extra_args",
178
               "ignore_secondaries" ]
179

  
180

  
174 181
class OpAddMDDRBDComponent(OpCode):
175 182
  """Add a MD-DRBD component."""
176 183
  OP_ID = "OP_INSTANCE_ADD_MDDRBD"

Also available in: Unified diff