Revision c89eb67d

b/lib/cmdlib/cluster.py
741 741
       unset whether there are instances still using it.
742 742

  
743 743
    """
744
    lvm_is_enabled = utils.IsLvmEnabled(enabled_disk_templates)
745
    lvm_gets_enabled = utils.LvmGetsEnabled(enabled_disk_templates,
746
                                            new_enabled_disk_templates)
747
    current_vg_name = self.cfg.GetVGName()
748

  
749
    if self.op.vg_name == '':
750
      if lvm_is_enabled:
751
        raise errors.OpPrereqError("Cannot unset volume group if lvm-based"
752
                                   " disk templates are or get enabled.")
753

  
754
    if self.op.vg_name is None:
755
      if current_vg_name is None and lvm_is_enabled:
756
        raise errors.OpPrereqError("Please specify a volume group when"
757
                                   " enabling lvm-based disk-templates.")
758

  
744 759
    if self.op.vg_name is not None and not self.op.vg_name:
745 760
      if self.cfg.HasAnyDiskOfType(constants.LD_LV):
746 761
        raise errors.OpPrereqError("Cannot disable lvm storage while lvm-based"
747 762
                                   " instances exist", errors.ECODE_INVAL)
748 763

  
749
    if (self.op.vg_name is not None and
750
        utils.IsLvmEnabled(enabled_disk_templates)) or \
751
           (self.cfg.GetVGName() is not None and
752
            utils.LvmGetsEnabled(enabled_disk_templates,
753
                                 new_enabled_disk_templates)):
764
    if (self.op.vg_name is not None and lvm_is_enabled) or \
765
        (self.cfg.GetVGName() is not None and lvm_gets_enabled):
754 766
      self._CheckVgNameOnNodes(node_uuids)
755 767

  
756 768
  def _CheckVgNameOnNodes(self, node_uuids):
......
774 786
                                   (self.cfg.GetNodeName(node_uuid), vgstatus),
775 787
                                   errors.ECODE_ENVIRON)
776 788

  
777
  def _GetEnabledDiskTemplates(self, cluster):
789
  @staticmethod
790
  def _GetEnabledDiskTemplatesInner(op_enabled_disk_templates,
791
                                    old_enabled_disk_templates):
778 792
    """Determines the enabled disk templates and the subset of disk templates
779 793
       that are newly enabled by this operation.
780 794

  
781 795
    """
782 796
    enabled_disk_templates = None
783 797
    new_enabled_disk_templates = []
784
    if self.op.enabled_disk_templates:
785
      enabled_disk_templates = self.op.enabled_disk_templates
798
    if op_enabled_disk_templates:
799
      enabled_disk_templates = op_enabled_disk_templates
786 800
      new_enabled_disk_templates = \
787 801
        list(set(enabled_disk_templates)
788
             - set(cluster.enabled_disk_templates))
802
             - set(old_enabled_disk_templates))
789 803
    else:
790
      enabled_disk_templates = cluster.enabled_disk_templates
804
      enabled_disk_templates = old_enabled_disk_templates
791 805
    return (enabled_disk_templates, new_enabled_disk_templates)
792 806

  
807
  def _GetEnabledDiskTemplates(self, cluster):
808
    """Determines the enabled disk templates and the subset of disk templates
809
       that are newly enabled by this operation.
810

  
811
    """
812
    return self._GetEnabledDiskTemplatesInner(self.op.enabled_disk_templates,
813
                                              cluster.enabled_disk_templates)
814

  
793 815
  def _CheckIpolicy(self, cluster, enabled_disk_templates):
794 816
    """Checks the ipolicy.
795 817

  
......
1069 1091

  
1070 1092
    """
1071 1093
    if self.op.vg_name is not None:
1072
      if self.op.vg_name and not \
1073
           utils.IsLvmEnabled(self.cluster.enabled_disk_templates):
1074
        feedback_fn("Note that you specified a volume group, but did not"
1075
                    " enable any lvm disk template.")
1076 1094
      new_volume = self.op.vg_name
1077 1095
      if not new_volume:
1078
        if utils.IsLvmEnabled(self.cluster.enabled_disk_templates):
1079
          raise errors.OpPrereqError("Cannot unset volume group if lvm-based"
1080
                                     " disk templates are enabled.")
1081 1096
        new_volume = None
1082 1097
      if new_volume != self.cfg.GetVGName():
1083 1098
        self.cfg.SetVGName(new_volume)
1084 1099
      else:
1085 1100
        feedback_fn("Cluster LVM configuration already in desired"
1086 1101
                    " state, not changing")
1087
    else:
1088
      if utils.IsLvmEnabled(self.cluster.enabled_disk_templates) and \
1089
          not self.cfg.GetVGName():
1090
        raise errors.OpPrereqError("Please specify a volume group when"
1091
                                   " enabling lvm-based disk-templates.")
1092 1102

  
1093 1103
  def _SetFileStorageDir(self, feedback_fn):
1094 1104
    """Set the file storage directory.
b/test/py/ganeti.cmdlib.cluster_unittest.py
76 76
        NotImplemented, "", self.enabled_disk_templates)
77 77

  
78 78

  
79
class TestGetEnabledDiskTemplates(unittest.TestCase):
80

  
81
  def testNoNew(self):
82
    op_dts = [constants.DT_DISKLESS]
83
    old_dts = [constants.DT_DISKLESS]
84
    (enabled_dts, new_dts) =\
85
        cluster.LUClusterSetParams._GetEnabledDiskTemplatesInner(
86
            op_dts, old_dts)
87
    self.assertEqual(enabled_dts, old_dts)
88
    self.assertEqual(new_dts, [])
89

  
90

  
79 91
if __name__ == "__main__":
80 92
  testutils.GanetiTestProgram()

Also available in: Unified diff