Revision fb60bc6a lib/masterd/iallocator.py

b/lib/masterd/iallocator.py
153 153
    ("nics", ht.TListOf(ht.TDict)),
154 154
    ("vcpus", ht.TInt),
155 155
    ("hypervisor", ht.TString),
156
    ("node_whitelist", ht.TMaybeListOf(ht.TNonEmptyString)),
156 157
    ]
157 158
  REQ_RESULT = ht.TList
158 159

  
......
421 422

  
422 423
    if isinstance(self.req, IAReqInstanceAlloc):
423 424
      hypervisor_name = self.req.hypervisor
425
      node_whitelist = self.req.node_whitelist
424 426
    elif isinstance(self.req, IAReqRelocate):
425 427
      hypervisor_name = cfg.GetInstanceInfo(self.req.name).hypervisor
428
      node_whitelist = None
426 429
    else:
427 430
      hypervisor_name = cluster_info.primary_hypervisor
431
      node_whitelist = None
428 432

  
429 433
    node_data = self.rpc.call_node_info(node_list, [cfg.GetVGName()],
430 434
                                        [hypervisor_name])
......
434 438

  
435 439
    data["nodegroups"] = self._ComputeNodeGroupData(cfg)
436 440

  
437
    config_ndata = self._ComputeBasicNodeData(cfg, ninfo)
441
    config_ndata = self._ComputeBasicNodeData(cfg, ninfo, node_whitelist)
438 442
    data["nodes"] = self._ComputeDynamicNodeData(ninfo, node_data, node_iinfo,
439 443
                                                 i_list, config_ndata)
440 444
    assert len(data["nodes"]) == len(ninfo), \
......
461 465
    return ng
462 466

  
463 467
  @staticmethod
464
  def _ComputeBasicNodeData(cfg, node_cfg):
468
  def _ComputeBasicNodeData(cfg, node_cfg, node_whitelist):
465 469
    """Compute global node data.
466 470

  
467 471
    @rtype: dict
......
473 477
      "tags": list(ninfo.GetTags()),
474 478
      "primary_ip": ninfo.primary_ip,
475 479
      "secondary_ip": ninfo.secondary_ip,
476
      "offline": ninfo.offline,
480
      "offline": (ninfo.offline or
481
                  not (node_whitelist is None or
482
                       ninfo.name in node_whitelist)),
477 483
      "drained": ninfo.drained,
478 484
      "master_candidate": ninfo.master_candidate,
479 485
      "group": ninfo.group,

Also available in: Unified diff