Ejemplo n.º 1
0
 def BurnFailover(self):
     """Failover the instances."""
     Log("Failing over instances")
     for instance in self.instances:
         Log("instance %s", instance, indent=1)
         op = opcodes.OpInstanceFailover(instance_name=instance,
                                         ignore_consistency=False)
         self.ExecOrQueue(instance, [op])
Ejemplo n.º 2
0
def FailoverNode(opts, args):
    """Failover all primary instance on a node.

  @param opts: the command line options selected by the user
  @type args: list
  @param args: should be an empty list
  @rtype: int
  @return: the desired exit code

  """
    cl = GetClient()
    force = opts.force
    selected_fields = ["name", "pinst_list"]

    # these fields are static data anyway, so it doesn't matter, but
    # locking=True should be safer
    qcl = GetClient()
    result = qcl.QueryNodes(names=args,
                            fields=selected_fields,
                            use_locking=False)
    qcl.Close()
    node, pinst = result[0]

    if not pinst:
        ToStderr("No primary instances on node %s, exiting.", node)
        return 0

    pinst = utils.NiceSort(pinst)

    retcode = 0

    if not force and not AskUser("Fail over instance(s) %s?" %
                                 (",".join("'%s'" % name for name in pinst))):
        return 2

    jex = JobExecutor(cl=cl, opts=opts)
    for iname in pinst:
        op = opcodes.OpInstanceFailover(
            instance_name=iname,
            ignore_consistency=opts.ignore_consistency,
            iallocator=opts.iallocator)
        jex.QueueJob(iname, op)
    results = jex.GetResults()
    bad_cnt = len([row for row in results if not row[0]])
    if bad_cnt == 0:
        ToStdout("All %d instance(s) failed over successfully.", len(results))
    else:
        ToStdout(
            "There were errors during the failover:\n"
            "%d error(s) out of %d instance(s).", bad_cnt, len(results))
    return retcode
Ejemplo n.º 3
0
    def _MigrateToFailover(op):
        """Return an equivalent failover opcode for a migrate one.

    If the argument is not a failover opcode, return it unchanged.

    """
        if not isinstance(op, opcodes.OpInstanceMigrate):
            return op
        else:
            return opcodes.OpInstanceFailover(
                instance_name=op.instance_name,
                instance_uuid=getattr(op, "instance_uuid", None),
                target_node=getattr(op, "target_node", None),
                target_node_uuid=getattr(op, "target_node_uuid", None),
                ignore_ipolicy=op.ignore_ipolicy,
                cleanup=op.cleanup)
Ejemplo n.º 4
0
  def setUp(self):
    super(TestLUInstanceFailover, self).setUp()

    self.snode = self.cfg.AddNewNode()

    hv_info = ("bootid",
               [{
                 "type": constants.ST_LVM_VG,
                 "storage_free": 10000
               }],
               ({"memory_free": 10000}, ))
    self.rpc.call_node_info.return_value = \
      self.RpcResultsBuilder() \
        .AddSuccessfulNode(self.master, hv_info) \
        .AddSuccessfulNode(self.snode, hv_info) \
        .Build()

    self.rpc.call_blockdev_find.return_value = \
      self.RpcResultsBuilder() \
        .CreateSuccessfulNodeResult(self.master, objects.BlockDevStatus())

    self.rpc.call_instance_shutdown.return_value = \
      self.RpcResultsBuilder() \
        .CreateSuccessfulNodeResult(self.master, True)
    self.rpc.call_blockdev_shutdown.return_value = \
      self.RpcResultsBuilder() \
        .CreateSuccessfulNodeResult(self.master, True)
    self.rpc.call_blockdev_assemble.return_value = \
      self.RpcResultsBuilder() \
        .CreateSuccessfulNodeResult(self.snode,
                                    ("/dev/mock", "/var/mock", None))
    self.rpc.call_instance_start.return_value = \
      self.RpcResultsBuilder() \
        .CreateSuccessfulNodeResult(self.snode, True)

    self.inst = self.cfg.AddNewInstance(disk_template=constants.DT_DRBD8,
                                        admin_state=constants.ADMINST_UP,
                                        secondary_node=self.snode)
    self.op = opcodes.OpInstanceFailover(instance_name=self.inst.name)