Example #1
0
def _TestGroupModifyISpecs(groupname):
  # This test is built on the assumption that the default ipolicy holds for
  # the node group under test
  old_values = _GetGroupIPolicy(groupname)
  samevals = dict((p, 4) for p in constants.ISPECS_PARAMETERS)
  base_specs = {
    constants.ISPECS_MINMAX: [{
      constants.ISPECS_MIN: samevals,
      constants.ISPECS_MAX: samevals,
      }],
    }
  mod_values = _TestGroupSetISpecs(groupname, new_specs=base_specs,
                                   old_values=old_values)
  for par in constants.ISPECS_PARAMETERS:
    # First make sure that the test works with good values
    good_specs = {
      constants.ISPECS_MINMAX: [{
        constants.ISPECS_MIN: {par: 8},
        constants.ISPECS_MAX: {par: 8},
        }],
      }
    mod_values = _TestGroupSetISpecs(groupname, diff_specs=good_specs,
                                     old_values=mod_values)
    bad_specs = {
      constants.ISPECS_MINMAX: [{
        constants.ISPECS_MIN: {par: 8},
        constants.ISPECS_MAX: {par: 4},
        }],
      }
    _TestGroupSetISpecs(groupname, diff_specs=bad_specs, fail=True,
                        old_values=mod_values)
  AssertCommand(["gnt-group", "modify", "--ipolicy-bounds-specs", "default",
                 groupname])
  AssertEqual(_GetGroupIPolicy(groupname), old_values)

  # Get the ipolicy command (from the cluster config)
  mnode = qa_config.GetMasterNode()
  addcmd = GetCommandOutput(mnode.primary, utils.ShellQuoteArgs([
    "gnt-group", "show-ispecs-cmd", "--include-defaults", groupname,
    ]))
  modcmd = ["gnt-group", "modify"]
  opts = addcmd.split()
  assert opts[0:2] == ["gnt-group", "add"]
  for k in range(2, len(opts) - 1):
    if opts[k].startswith("--ipolicy-"):
      assert k + 2 <= len(opts)
      modcmd.extend(opts[k:k + 2])
  modcmd.append(groupname)
  # Apply the ipolicy to the group and verify the result
  AssertCommand(modcmd)
  new_addcmd = GetCommandOutput(mnode.primary, utils.ShellQuoteArgs([
    "gnt-group", "show-ispecs-cmd", groupname,
    ]))
  AssertEqual(addcmd, new_addcmd)
Example #2
0
def TestClusterModifyISpecs():
  """gnt-cluster modify --specs-*"""
  params = ["memory-size", "disk-size", "disk-count", "cpu-count", "nic-count"]
  (cur_policy, cur_specs) = _GetClusterIPolicy()
  # This test assumes that there is only one min/max bound
  assert len(cur_specs[constants.ISPECS_MINMAX]) == 1
  for par in params:
    test_values = [
      (True, 0, 4, 12),
      (True, 4, 4, 12),
      (True, 4, 12, 12),
      (True, 4, 4, 4),
      (False, 4, 0, 12),
      (False, 4, 16, 12),
      (False, 4, 4, 0),
      (False, 12, 4, 4),
      (False, 12, 4, 0),
      (False, "a", 4, 12),
      (False, 0, "a", 12),
      (False, 0, 4, "a"),
      # This is to restore the old values
      (True,
       cur_specs[constants.ISPECS_MINMAX][0][constants.ISPECS_MIN][par],
       cur_specs[constants.ISPECS_STD][par],
       cur_specs[constants.ISPECS_MINMAX][0][constants.ISPECS_MAX][par])
      ]
    for (good, mn, st, mx) in test_values:
      new_vals = {
        constants.ISPECS_MINMAX: [{
          constants.ISPECS_MIN: {par: mn},
          constants.ISPECS_MAX: {par: mx}
          }],
        constants.ISPECS_STD: {par: st}
        }
      cur_state = (cur_policy, cur_specs)
      # We update cur_specs, as we've copied the values to restore already
      (cur_policy, cur_specs) = TestClusterSetISpecs(
        diff_specs=new_vals, fail=not good, old_values=cur_state)

    # Get the ipolicy command
    mnode = qa_config.GetMasterNode()
    initcmd = GetCommandOutput(mnode.primary, "gnt-cluster show-ispecs-cmd")
    modcmd = ["gnt-cluster", "modify"]
    opts = initcmd.split()
    assert opts[0:2] == ["gnt-cluster", "init"]
    for k in range(2, len(opts) - 1):
      if opts[k].startswith("--ipolicy-"):
        assert k + 2 <= len(opts)
        modcmd.extend(opts[k:k + 2])
    # Re-apply the ipolicy (this should be a no-op)
    AssertCommand(modcmd)
    new_initcmd = GetCommandOutput(mnode.primary, "gnt-cluster show-ispecs-cmd")
    AssertEqual(initcmd, new_initcmd)
Example #3
0
def TestClusterModifyISpecs():
    """gnt-cluster modify --specs-*"""
    params = [
        "memory-size", "disk-size", "disk-count", "cpu-count", "nic-count"
    ]
    (cur_policy, cur_specs) = _GetClusterIPolicy()
    # This test assumes that there is only one min/max bound
    assert len(cur_specs[constants.ISPECS_MINMAX]) == 1
    for par in params:
        test_values = [
            (True, 0, 4, 12),
            (True, 4, 4, 12),
            (True, 4, 12, 12),
            (True, 4, 4, 4),
            (False, 4, 0, 12),
            (False, 4, 16, 12),
            (False, 4, 4, 0),
            (False, 12, 4, 4),
            (False, 12, 4, 0),
            (False, "a", 4, 12),
            (False, 0, "a", 12),
            (False, 0, 4, "a"),
            # This is to restore the old values
            (True,
             cur_specs[constants.ISPECS_MINMAX][0][constants.ISPECS_MIN][par],
             cur_specs[constants.ISPECS_STD][par],
             cur_specs[constants.ISPECS_MINMAX][0][constants.ISPECS_MAX][par])
        ]
        for (good, mn, st, mx) in test_values:
            new_vals = {
                constants.ISPECS_MINMAX: [{
                    constants.ISPECS_MIN: {
                        par: mn
                    },
                    constants.ISPECS_MAX: {
                        par: mx
                    }
                }],
                constants.ISPECS_STD: {
                    par: st
                }
            }
            cur_state = (cur_policy, cur_specs)
            # We update cur_specs, as we've copied the values to restore already
            (cur_policy,
             cur_specs) = TestClusterSetISpecs(diff_specs=new_vals,
                                               fail=not good,
                                               old_values=cur_state)

        # Get the ipolicy command
        mnode = qa_config.GetMasterNode()
        initcmd = GetCommandOutput(mnode.primary,
                                   "gnt-cluster show-ispecs-cmd")
        modcmd = ["gnt-cluster", "modify"]
        opts = initcmd.split()
        assert opts[0:2] == ["gnt-cluster", "init"]
        for k in range(2, len(opts) - 1):
            if opts[k].startswith("--ipolicy-"):
                assert k + 2 <= len(opts)
                modcmd.extend(opts[k:k + 2])
        # Re-apply the ipolicy (this should be a no-op)
        AssertCommand(modcmd)
        new_initcmd = GetCommandOutput(mnode.primary,
                                       "gnt-cluster show-ispecs-cmd")
        AssertEqual(initcmd, new_initcmd)