Unit tests updated and expanded with an inheritance check.
The flag has no effect yet.
Signed-off-by: Bernardo Dal Seno <bdalseno@google.com>
Reviewed-by: Iustin Pop <iustin@google.com>
$(buildParam "ND" "ndp"
[ simpleField "oob_program" [t| String |]
, simpleField "spindle_count" [t| Int |]
+ , simpleField "exclusive_storage" [t| Bool |]
])
$(buildObject "Node" "node" $
# Node parameter names
ND_OOB_PROGRAM = "oob_program"
ND_SPINDLE_COUNT = "spindle_count"
+ND_EXCLUSIVE_STORAGE = "exclusive_storage"
NDS_PARAMETER_TYPES = {
ND_OOB_PROGRAM: VTYPE_STRING,
ND_SPINDLE_COUNT: VTYPE_INT,
+ ND_EXCLUSIVE_STORAGE: VTYPE_BOOL,
}
NDS_PARAMETERS = frozenset(NDS_PARAMETER_TYPES.keys())
NDS_PARAMETER_TITLES = {
ND_OOB_PROGRAM: "OutOfBandProgram",
ND_SPINDLE_COUNT: "SpindleCount",
+ ND_EXCLUSIVE_STORAGE: "ExclusiveStorage",
}
# Logical Disks parameters
NDC_DEFAULTS = {
ND_OOB_PROGRAM: "",
ND_SPINDLE_COUNT: 1,
+ ND_EXCLUSIVE_STORAGE: False,
}
DISK_LD_DEFAULTS = {
hard-drives, its meaning is site-local and just the relative values
matter.
+exclusive_storage
+ When this Boolean flag is enabled, physical disks on the node are
+ assigned to instance disks in an exclusive manner, so as to lower I/O
+ interference between instances. See the `Partitioned Ganeti
+ <design-partitioned.rst>`_ design document for more details.
+
Hypervisor State Parameters
~~~~~~~~~~~~~~~~~~~~~~~~~~~
my_ndparams = {
constants.ND_OOB_PROGRAM: "/bin/node-oob",
constants.ND_SPINDLE_COUNT: 1,
+ constants.ND_EXCLUSIVE_STORAGE: False,
}
cfg = self._get_object()
cfg.Update(node, None)
self.assertEqual(cfg.GetNdParams(node), my_ndparams)
+ def testGetNdParamsInheritance(self):
+ node_ndparams = {
+ constants.ND_OOB_PROGRAM: "/bin/node-oob",
+ }
+ group_ndparams = {
+ constants.ND_SPINDLE_COUNT: 10,
+ }
+ expected_ndparams = {
+ constants.ND_OOB_PROGRAM: "/bin/node-oob",
+ constants.ND_SPINDLE_COUNT: 10,
+ constants.ND_EXCLUSIVE_STORAGE:
+ constants.NDC_DEFAULTS[constants.ND_EXCLUSIVE_STORAGE],
+ }
+ cfg = self._get_object()
+ node = cfg.GetNodeInfo(cfg.GetNodeList()[0])
+ node.ndparams = node_ndparams
+ cfg.Update(node, None)
+ group = cfg.GetNodeGroup(node.group)
+ group.ndparams = group_ndparams
+ cfg.Update(group, None)
+ self.assertEqual(cfg.GetNdParams(node), expected_ndparams)
+
def testAddGroupFillsFieldsIfMissing(self):
cfg = self._get_object()
group = objects.NodeGroup(name="test", members=[])
}
ndparams = {
constants.ND_OOB_PROGRAM: "/bin/cluster-oob",
- constants.ND_SPINDLE_COUNT: 1
+ constants.ND_SPINDLE_COUNT: 1,
+ constants.ND_EXCLUSIVE_STORAGE: False,
}
self.fake_cl = objects.Cluster(hvparams=hvparams, os_hvp=os_hvp,
group_ndparams = {
constants.ND_OOB_PROGRAM: "/bin/group-oob",
constants.ND_SPINDLE_COUNT: 10,
+ constants.ND_EXCLUSIVE_STORAGE: True,
}
fake_group = objects.NodeGroup(name="testgroup",
ndparams=group_ndparams)
node_ndparams = {
constants.ND_OOB_PROGRAM: "/bin/node-oob",
constants.ND_SPINDLE_COUNT: 2,
+ constants.ND_EXCLUSIVE_STORAGE: True,
}
fake_node = objects.Node(name="test",
ndparams=node_ndparams,
node_ndparams = {
constants.ND_OOB_PROGRAM: "/bin/node-oob",
constants.ND_SPINDLE_COUNT: 5,
+ constants.ND_EXCLUSIVE_STORAGE: True,
}
fake_node = objects.Node(name="test",
ndparams=node_ndparams,