Revision 60152bbe lib/cmdlib.py

b/lib/cmdlib.py
12033 12033
    self.name = None
12034 12034
    self.evac_nodes = None
12035 12035
    self.instances = None
12036
    self.reloc_mode = None
12036
    self.evac_mode = None
12037 12037
    self.target_groups = []
12038 12038
    # computed fields
12039 12039
    self.required_nodes = None
......
12087 12087
      hypervisor_name = self.hypervisor
12088 12088
    elif self.mode == constants.IALLOCATOR_MODE_RELOC:
12089 12089
      hypervisor_name = cfg.GetInstanceInfo(self.name).hypervisor
12090
    elif self.mode in (constants.IALLOCATOR_MODE_MEVAC,
12091
                       constants.IALLOCATOR_MODE_MRELOC):
12090
    else:
12092 12091
      hypervisor_name = cluster_info.enabled_hypervisors[0]
12093 12092

  
12094 12093
    node_data = self.rpc.call_node_info(node_list, cfg.GetVGName(),
......
12323 12322
      }
12324 12323
    return request
12325 12324

  
12326
  def _AddMultiRelocate(self):
12327
    """Get data for multi-relocate requests.
12325
  def _AddNodeEvacuate(self):
12326
    """Get data for node-evacuate requests.
12327

  
12328
    """
12329
    return {
12330
      "instances": self.instances,
12331
      "evac_mode": self.evac_mode,
12332
      }
12333

  
12334
  def _AddChangeGroup(self):
12335
    """Get data for node-evacuate requests.
12328 12336

  
12329 12337
    """
12330 12338
    return {
12331 12339
      "instances": self.instances,
12332
      "reloc_mode": self.reloc_mode,
12333 12340
      "target_groups": self.target_groups,
12334 12341
      }
12335 12342

  
......
12355 12362
    self.in_text = serializer.Dump(self.in_data)
12356 12363

  
12357 12364
  _STRING_LIST = ht.TListOf(ht.TString)
12365
  _JOBSET_LIST = ht.TListOf(ht.TListOf(ht.TStrictDict(True, False, {
12366
     # pylint: disable-msg=E1101
12367
     # Class '...' has no 'OP_ID' member
12368
     "OP_ID": ht.TElemOf([opcodes.OpInstanceFailover.OP_ID,
12369
                          opcodes.OpInstanceMigrate.OP_ID,
12370
                          opcodes.OpInstanceReplaceDisks.OP_ID])
12371
     })))
12358 12372
  _MODE_DATA = {
12359 12373
    constants.IALLOCATOR_MODE_ALLOC:
12360 12374
      (_AddNewInstance,
......
12376 12390
    constants.IALLOCATOR_MODE_MEVAC:
12377 12391
      (_AddEvacuateNodes, [("evac_nodes", _STRING_LIST)],
12378 12392
       ht.TListOf(ht.TAnd(ht.TIsLength(2), _STRING_LIST))),
12379
    constants.IALLOCATOR_MODE_MRELOC:
12380
      (_AddMultiRelocate, [
12393
     constants.IALLOCATOR_MODE_NODE_EVAC:
12394
      (_AddNodeEvacuate, [
12395
        ("instances", _STRING_LIST),
12396
        ("evac_mode", ht.TElemOf(constants.IALLOCATOR_NEVAC_MODES)),
12397
        ], _JOBSET_LIST),
12398
     constants.IALLOCATOR_MODE_CHG_GROUP:
12399
      (_AddChangeGroup, [
12381 12400
        ("instances", _STRING_LIST),
12382
        ("reloc_mode", ht.TElemOf(constants.IALLOCATOR_MRELOC_MODES)),
12383 12401
        ("target_groups", _STRING_LIST),
12384
        ],
12385
       ht.TListOf(ht.TListOf(ht.TStrictDict(True, False, {
12386
         # pylint: disable-msg=E1101
12387
         # Class '...' has no 'OP_ID' member
12388
         "OP_ID": ht.TElemOf([opcodes.OpInstanceFailover.OP_ID,
12389
                              opcodes.OpInstanceMigrate.OP_ID,
12390
                              opcodes.OpInstanceReplaceDisks.OP_ID])
12391
         })))),
12402
        ], _JOBSET_LIST),
12392 12403
    }
12393 12404

  
12394 12405
  def Run(self, name, validate=True, call_fn=None):
......
12553 12564
      if not hasattr(self.op, "evac_nodes"):
12554 12565
        raise errors.OpPrereqError("Missing attribute 'evac_nodes' on"
12555 12566
                                   " opcode input", errors.ECODE_INVAL)
12556
    elif self.op.mode == constants.IALLOCATOR_MODE_MRELOC:
12557
      if self.op.instances:
12558
        self.op.instances = _GetWantedInstances(self, self.op.instances)
12559
      else:
12560
        raise errors.OpPrereqError("Missing instances to relocate",
12561
                                   errors.ECODE_INVAL)
12567
    elif self.op.mode in (constants.IALLOCATOR_MODE_CHG_GROUP,
12568
                          constants.IALLOCATOR_MODE_NODE_EVAC):
12569
      if not self.op.instances:
12570
        raise errors.OpPrereqError("Missing instances", errors.ECODE_INVAL)
12571
      self.op.instances = _GetWantedInstances(self, self.op.instances)
12562 12572
    else:
12563 12573
      raise errors.OpPrereqError("Invalid test allocator mode '%s'" %
12564 12574
                                 self.op.mode, errors.ECODE_INVAL)
......
12598 12608
      ial = IAllocator(self.cfg, self.rpc,
12599 12609
                       mode=self.op.mode,
12600 12610
                       evac_nodes=self.op.evac_nodes)
12601
    elif self.op.mode == constants.IALLOCATOR_MODE_MRELOC:
12611
    elif self.op.mode == constants.IALLOCATOR_MODE_CHG_GROUP:
12602 12612
      ial = IAllocator(self.cfg, self.rpc,
12603 12613
                       mode=self.op.mode,
12604 12614
                       instances=self.op.instances,
12605
                       reloc_mode=self.op.reloc_mode,
12606 12615
                       target_groups=self.op.target_groups)
12616
    elif self.op.mode == constants.IALLOCATOR_MODE_NODE_EVAC:
12617
      ial = IAllocator(self.cfg, self.rpc,
12618
                       mode=self.op.mode,
12619
                       instances=self.op.instances,
12620
                       evac_mode=self.op.evac_mode)
12607 12621
    else:
12608 12622
      raise errors.ProgrammerError("Uncatched mode %s in"
12609 12623
                                   " LUTestAllocator.Exec", self.op.mode)

Also available in: Unified diff