Revision 6f665bf7

b/qa/ganeti-qa.py
577 577

  
578 578
def RunInstanceTests():
579 579
  """Create and exercise instances."""
580
  instance_tests = [
581
    ("instance-add-plain-disk", constants.DT_PLAIN,
582
     qa_instance.TestInstanceAddWithPlainDisk, 1),
583
    ("instance-add-drbd-disk", constants.DT_DRBD8,
584
     qa_instance.TestInstanceAddWithDrbdDisk, 2),
585
    ("instance-add-diskless", constants.DT_DISKLESS,
586
     qa_instance.TestInstanceAddDiskless, 1),
587
    ("instance-add-file", constants.DT_FILE,
588
     qa_instance.TestInstanceAddFile, 1),
589
  ]
580
  instance_tests = []
581
  enabled_disk_templates = qa_config.GetEnabledDiskTemplates()
582
  # FIXME: Refactor this to make the code more elegant wrt to disk templates.
583
  if constants.DT_PLAIN in enabled_disk_templates:
584
    instance_tests.append(("instance-add-plain-disk", constants.DT_PLAIN,
585
                           qa_instance.TestInstanceAddWithPlainDisk, 1))
586
  if constants.DT_DRBD8 in enabled_disk_templates:
587
    instance_tests.append(("instance-add-drbd-disk", constants.DT_DRBD8,
588
                           qa_instance.TestInstanceAddWithDrbdDisk, 2))
589
  if constants.DT_DISKLESS in enabled_disk_templates:
590
    instance_tests.append(("instance-add-diskless", constants.DT_DISKLESS,
591
                           qa_instance.TestInstanceAddDiskless, 1))
592
  if constants.DT_FILE in enabled_disk_templates:
593
    instance_tests.append(("instance-add-file", constants.DT_FILE,
594
                           qa_instance.TestInstanceAddFile, 1))
590 595

  
591 596
  for (test_name, templ, create_fun, num_nodes) in instance_tests:
592 597
    if (qa_config.TestEnabled(test_name) and
......
626 631
        qa_config.ReleaseManyNodes(inodes)
627 632
      qa_cluster.AssertClusterVerify()
628 633

  
634
  RunTestIf(
635
    "instance-add-restricted-by-disktemplates",
636
    qa_instance.TestInstanceCreationRestrictedByDiskTemplates)
637

  
629 638

  
630 639
def RunQa():
631 640
  """Main QA body.
b/qa/qa-sample.json
179 179
    "instance-add-file": true,
180 180
    "instance-add-drbd-disk": true,
181 181
    "instance-add-diskless": true,
182
    "instance-add-restricted-by-disktemplates": true,
182 183
    "instance-convert-disk": true,
183 184
    "instance-plain-rapi-common-tests": true,
184 185
    "instance-remove-drbd-offline": true,
b/qa/qa_instance.py
160 160
  """
161 161
  if disk_template == constants.DT_DRBD8:
162 162
    return _CreateInstanceDrbd8(nodes, fail=fail)
163
  elif disk_template in [constants.DT_DISKLESS, constants.DT_PLAIN]:
163
  elif disk_template in [constants.DT_DISKLESS, constants.DT_PLAIN,
164
                         constants.DT_FILE]:
164 165
    return _CreateInstanceByDiskTemplateOneNode(nodes, disk_template, fail=fail)
165 166
  else:
166
    #FIXME: Implement this for the remaining disk templates
167
    qa_error.Error("Instance creation not implemented for disk type '%s'." %
168
                   disk_template)
167
    # FIXME: This assumes that for all other disk templates, we only need one
168
    # node and no disk template specific parameters. This else-branch is
169
    # currently only used in cases where we expect failure. Extend it when
170
    # QA needs for these templates change.
171
    return _CreateInstanceByDiskTemplateOneNode(nodes, disk_template, fail=fail)
169 172

  
170 173

  
171 174
def _GetInstanceInfo(instance):
......
1001 1004
      filestorage = pathutils.DEFAULT_FILE_STORAGE_DIR
1002 1005
      disk = os.path.join(filestorage, instance.name)
1003 1006
      AssertCommand(["rm", "-rf", disk], node=snode)
1007

  
1008

  
1009
def TestInstanceCreationRestrictedByDiskTemplates():
1010
  """Test if adding instances is only possible if they use an enabled
1011
     disk template."""
1012
  enabled_disk_templates = qa_config.GetEnabledDiskTemplates()
1013
  nodes = qa_config.AcquireManyNodes(2)
1014

  
1015
  # Setup the cluster with the enabled_disk_templates
1016
  AssertCommand(
1017
    ["gnt-cluster", "modify",
1018
     "--enabled-disk-template=%s" %
1019
       ",".join(enabled_disk_templates)],
1020
    fail=False)
1021

  
1022
  # Test instance creation for enabled disk templates
1023
  for disk_template in enabled_disk_templates:
1024
    instance = CreateInstanceByDiskTemplate(nodes, disk_template, False)
1025
    TestInstanceRemove(instance)
1026

  
1027
  # Test that instance creation fails for disabled disk templates
1028
  disabled_disk_templates = list(constants.DISK_TEMPLATES
1029
                                 - set(enabled_disk_templates))
1030
  for disk_template in disabled_disk_templates:
1031
    instance = CreateInstanceByDiskTemplate(nodes, disk_template, True)
1032

  
1033
  # Test instance creation for after disabling enabled disk templates
1034
  if (len(enabled_disk_templates) > 1):
1035
    # Partition the disk templates, enable them separately and check if the
1036
    # disabled ones cannot be used by instances.
1037
    middle = len(enabled_disk_templates) / 2
1038
    templates1 = enabled_disk_templates[:middle]
1039
    templates2 = enabled_disk_templates[middle:]
1040

  
1041
    for (enabled, disabled) in [(templates1, templates2),
1042
                                (templates2, templates1)]:
1043
      AssertCommand(["gnt-cluster", "modify",
1044
                     "--enabled-disk-template=%s" %
1045
                       ",".join(enabled)],
1046
                    fail=False)
1047
      for disk_template in disabled:
1048
        CreateInstanceByDiskTemplate(nodes, disk_template, True)
1049
  elif (len(enabled_disk_templates) == 1):
1050
    # If only one disk template is enabled in the QA config, we have to enable
1051
    # some of the disabled disk templates in order to test if the disabling the
1052
    # only enabled disk template prohibits creating instances of that template.
1053
    AssertCommand(["gnt-cluster", "modify",
1054
                   "--enabled-disk-template=%s" %
1055
                     ",".join(disabled_disk_templates)],
1056
                  fail=False)
1057
    CreateInstanceByDiskTemplate(nodes, enabled_disk_templates[0], True)
1058
  else:
1059
    raise qa_error.Error("Please enable at least one disk template"
1060
                         " in your QA setup.")
1061

  
1062
  # Restore initially enabled disk templates
1063
  AssertCommand(["gnt-cluster", "modify",
1064
                 "--enabled-disk-template=%s" %
1065
                   ",".join(enabled_disk_templates)],
1066
                 fail=False)

Also available in: Unified diff