Revision cd46491f

b/lib/cmdlib.py
8639 8639
  return results
8640 8640

  
8641 8641

  
8642
def _ComputeLDParams(disk_template, disk_params):
8643
  """Computes Logical Disk parameters from Disk Template parameters.
8644

  
8645
  @type disk_template: string
8646
  @param disk_template: disk template, one of L{constants.DISK_TEMPLATES}
8647
  @type disk_params: dict
8648
  @param disk_params: disk template parameters; dict(template_name -> parameters
8649
  @rtype: list(dict)
8650
  @return: a list of dicts, one for each node of the disk hierarchy. Each dict
8651
    contains the LD parameters of the node. The tree is flattened in-order.
8652

  
8653
  """
8654
  if disk_template not in constants.DISK_TEMPLATES:
8655
    raise errors.ProgrammerError("Unknown disk template %s" % disk_template)
8656

  
8657
  result = list()
8658
  dt_params = disk_params[disk_template]
8659
  if disk_template == constants.DT_DRBD8:
8660
    drbd_params = {
8661
      constants.LDP_RESYNC_RATE: dt_params[constants.DRBD_RESYNC_RATE],
8662
      constants.LDP_BARRIERS: dt_params[constants.DRBD_DISK_BARRIERS],
8663
      constants.LDP_NO_META_FLUSH: dt_params[constants.DRBD_META_BARRIERS],
8664
      constants.LDP_DEFAULT_METAVG: dt_params[constants.DRBD_DEFAULT_METAVG],
8665
      constants.LDP_DISK_CUSTOM: dt_params[constants.DRBD_DISK_CUSTOM],
8666
      constants.LDP_NET_CUSTOM: dt_params[constants.DRBD_NET_CUSTOM],
8667
      constants.LDP_DYNAMIC_RESYNC: dt_params[constants.DRBD_DYNAMIC_RESYNC],
8668
      constants.LDP_PLAN_AHEAD: dt_params[constants.DRBD_PLAN_AHEAD],
8669
      constants.LDP_FILL_TARGET: dt_params[constants.DRBD_FILL_TARGET],
8670
      constants.LDP_DELAY_TARGET: dt_params[constants.DRBD_DELAY_TARGET],
8671
      constants.LDP_MAX_RATE: dt_params[constants.DRBD_MAX_RATE],
8672
      constants.LDP_MIN_RATE: dt_params[constants.DRBD_MIN_RATE],
8673
      }
8674

  
8675
    drbd_params = \
8676
      objects.FillDict(constants.DISK_LD_DEFAULTS[constants.LD_DRBD8],
8677
                       drbd_params)
8678

  
8679
    result.append(drbd_params)
8680

  
8681
    # data LV
8682
    data_params = {
8683
      constants.LDP_STRIPES: dt_params[constants.DRBD_DATA_STRIPES],
8684
      }
8685
    data_params = \
8686
      objects.FillDict(constants.DISK_LD_DEFAULTS[constants.LD_LV],
8687
                       data_params)
8688
    result.append(data_params)
8689

  
8690
    # metadata LV
8691
    meta_params = {
8692
      constants.LDP_STRIPES: dt_params[constants.DRBD_META_STRIPES],
8693
      }
8694
    meta_params = \
8695
      objects.FillDict(constants.DISK_LD_DEFAULTS[constants.LD_LV],
8696
                       meta_params)
8697
    result.append(meta_params)
8698

  
8699
  elif (disk_template == constants.DT_FILE or
8700
        disk_template == constants.DT_SHARED_FILE):
8701
    result.append(constants.DISK_LD_DEFAULTS[constants.LD_FILE])
8702

  
8703
  elif disk_template == constants.DT_PLAIN:
8704
    params = {
8705
      constants.LDP_STRIPES: dt_params[constants.LV_STRIPES],
8706
      }
8707
    params = \
8708
      objects.FillDict(constants.DISK_LD_DEFAULTS[constants.LD_LV],
8709
                       params)
8710
    result.append(params)
8711

  
8712
  elif disk_template == constants.DT_BLOCK:
8713
    result.append(constants.DISK_LD_DEFAULTS[constants.LD_BLOCKDEV])
8714

  
8715
  elif disk_template == constants.DT_RBD:
8716
    params = {
8717
      constants.LDP_POOL: dt_params[constants.RBD_POOL]
8718
      }
8719
    params = \
8720
      objects.FillDict(constants.DISK_LD_DEFAULTS[constants.LD_RBD],
8721
                       params)
8722
    result.append(params)
8723

  
8724
  return result
8725

  
8726

  
8727 8642
def _GenerateDRBD8Branch(lu, primary, secondary, size, vgnames, names,
8728 8643
                         iv_name, p_minor, s_minor, drbd_params, data_params,
8729 8644
                         meta_params):
b/lib/objects.py
922 922
                             self.params)
923 923
    # add here config upgrade for this disk
924 924

  
925
  @staticmethod
926
  def ComputeLDParams(disk_template, disk_params):
927
    """Computes Logical Disk parameters from Disk Template parameters.
928

  
929
    @type disk_template: string
930
    @param disk_template: disk template, one of L{constants.DISK_TEMPLATES}
931
    @type disk_params: dict
932
    @param disk_params: disk template parameters;
933
                        dict(template_name -> parameters
934
    @rtype: list(dict)
935
    @return: a list of dicts, one for each node of the disk hierarchy. Each dict
936
      contains the LD parameters of the node. The tree is flattened in-order.
937

  
938
    """
939
    if disk_template not in constants.DISK_TEMPLATES:
940
      raise errors.ProgrammerError("Unknown disk template %s" % disk_template)
941

  
942
    assert disk_template in disk_params
943

  
944
    result = list()
945
    dt_params = disk_params[disk_template]
946
    if disk_template == constants.DT_DRBD8:
947
      drbd_params = {
948
        constants.LDP_RESYNC_RATE: dt_params[constants.DRBD_RESYNC_RATE],
949
        constants.LDP_BARRIERS: dt_params[constants.DRBD_DISK_BARRIERS],
950
        constants.LDP_NO_META_FLUSH: dt_params[constants.DRBD_META_BARRIERS],
951
        constants.LDP_DEFAULT_METAVG: dt_params[constants.DRBD_DEFAULT_METAVG],
952
        constants.LDP_DISK_CUSTOM: dt_params[constants.DRBD_DISK_CUSTOM],
953
        constants.LDP_NET_CUSTOM: dt_params[constants.DRBD_NET_CUSTOM],
954
        constants.LDP_DYNAMIC_RESYNC: dt_params[constants.DRBD_DYNAMIC_RESYNC],
955
        constants.LDP_PLAN_AHEAD: dt_params[constants.DRBD_PLAN_AHEAD],
956
        constants.LDP_FILL_TARGET: dt_params[constants.DRBD_FILL_TARGET],
957
        constants.LDP_DELAY_TARGET: dt_params[constants.DRBD_DELAY_TARGET],
958
        constants.LDP_MAX_RATE: dt_params[constants.DRBD_MAX_RATE],
959
        constants.LDP_MIN_RATE: dt_params[constants.DRBD_MIN_RATE],
960
        }
961

  
962
      drbd_params = \
963
        FillDict(constants.DISK_LD_DEFAULTS[constants.LD_DRBD8],
964
                 drbd_params)
965

  
966
      result.append(drbd_params)
967

  
968
      # data LV
969
      data_params = {
970
        constants.LDP_STRIPES: dt_params[constants.DRBD_DATA_STRIPES],
971
        }
972
      data_params = \
973
        FillDict(constants.DISK_LD_DEFAULTS[constants.LD_LV],
974
                 data_params)
975
      result.append(data_params)
976

  
977
      # metadata LV
978
      meta_params = {
979
        constants.LDP_STRIPES: dt_params[constants.DRBD_META_STRIPES],
980
        }
981
      meta_params = \
982
        FillDict(constants.DISK_LD_DEFAULTS[constants.LD_LV],
983
                 meta_params)
984
      result.append(meta_params)
985

  
986
    elif (disk_template == constants.DT_FILE or
987
          disk_template == constants.DT_SHARED_FILE):
988
      result.append(constants.DISK_LD_DEFAULTS[constants.LD_FILE])
989

  
990
    elif disk_template == constants.DT_PLAIN:
991
      params = {
992
        constants.LDP_STRIPES: dt_params[constants.LV_STRIPES],
993
        }
994
      params = \
995
        FillDict(constants.DISK_LD_DEFAULTS[constants.LD_LV],
996
                 params)
997
      result.append(params)
998

  
999
    elif disk_template == constants.DT_BLOCK:
1000
      result.append(constants.DISK_LD_DEFAULTS[constants.LD_BLOCKDEV])
1001

  
1002
    elif disk_template == constants.DT_RBD:
1003
      params = {
1004
        constants.LDP_POOL: dt_params[constants.RBD_POOL]
1005
        }
1006
      params = \
1007
        FillDict(constants.DISK_LD_DEFAULTS[constants.LD_RBD],
1008
                 params)
1009
      result.append(params)
1010

  
1011
    return result
1012

  
925 1013

  
926 1014
class InstancePolicy(ConfigObject):
927 1015
  """Config object representing instance policy limits dictionary.
b/lib/rpc.py
575 575
  return [(d.ToDict(), uid) for d, uid in value]
576 576

  
577 577

  
578
def _AnnotateDParamsDRBD(disk, (drbd_params, data_params, meta_params)):
579
  """Annotates just DRBD disks layouts.
580

  
581
  """
582
  assert disk.dev_type == constants.LD_DRBD8
583

  
584
  disk.params = objects.FillDict(drbd_params, disk.params)
585
  (dev_data, dev_meta) = disk.children
586
  dev_data.params = objects.FillDict(data_params, dev_data.params)
587
  dev_meta.params = objects.FillDict(meta_params, dev_meta.params)
588

  
589
  return disk
590

  
591

  
592
def _AnnotateDParamsGeneric(disk, (params, )):
593
  """Generic disk parameter annotation routine.
594

  
595
  """
596
  assert disk.dev_type != constants.LD_DRBD8
597

  
598
  disk.params = objects.FillDict(params, disk.params)
599

  
600
  return disk
601

  
602

  
603
def AnnotateDiskParams(template, disks, disk_params):
604
  """Annotates the disk objects with the disk parameters.
605

  
606
  @param template: The disk template used
607
  @param disks: The list of disks objects to annotate
608
  @param disk_params: The disk paramaters for annotation
609
  @returns: A list of disk objects annotated
610

  
611
  """
612
  ld_params = objects.Disk.ComputeLDParams(template, disk_params)
613

  
614
  if template == constants.DT_DRBD8:
615
    annotation_fn = _AnnotateDParamsDRBD
616
  elif template == constants.DT_DISKLESS:
617
    annotation_fn = lambda disk, _: disk
618
  else:
619
    annotation_fn = _AnnotateDParamsGeneric
620

  
621
  new_disks = []
622
  for disk in disks:
623
    new_disks.append(annotation_fn(disk.Copy(), ld_params))
624

  
625
  return new_disks
626

  
627

  
578 628
#: Generic encoders
579 629
_ENCODERS = {
580 630
  rpc_defs.ED_OBJECT_DICT: _ObjectToDict,

Also available in: Unified diff