On Wed, May 22, 2013 at 5:28 PM, Thomas Thrainer <[email protected]>wrote:
> hail-alloc-invalid-network defines a cluster with two nodegroups and an > allocation request which does not fit on any of the groups. Group 1 has > invalid disk-templates while Group 2 is not connected to the right > networks. > > hail-alloc-restricted-network defines a cluster wih two nodegroups. > Nodegroup Group 1 is only used as last_resort group, but is chosen by > hail as only this group is connected to the right networks. > > Signed-off-by: Thomas Thrainer <[email protected]> > --- > Makefile.am | 2 + > src/Ganeti/HTools/Cluster.hs | 2 +- > test/data/htools/hail-alloc-invalid-network.json | 155 ++++++++++++ > .../data/htools/hail-alloc-restricted-network.json | 277 > +++++++++++++++++++++ > test/hs/shelltests/htools-hail.test | 10 + > 5 files changed, 445 insertions(+), 1 deletion(-) > create mode 100644 test/data/htools/hail-alloc-invalid-network.json > create mode 100644 test/data/htools/hail-alloc-restricted-network.json > > diff --git a/Makefile.am b/Makefile.am > index 507ffbe..a3295de 100644 > --- a/Makefile.am > +++ b/Makefile.am > @@ -1023,7 +1023,9 @@ TEST_FILES = \ > test/data/htools/common-suffix.data \ > test/data/htools/empty-cluster.data \ > test/data/htools/hail-alloc-drbd.json \ > + test/data/htools/hail-alloc-invalid-network.json \ > test/data/htools/hail-alloc-invalid-twodisks.json \ > + test/data/htools/hail-alloc-restricted-network.json \ > test/data/htools/hail-alloc-twodisks.json \ > test/data/htools/hail-change-group.json \ > test/data/htools/hail-invalid-reloc.json \ > diff --git a/src/Ganeti/HTools/Cluster.hs b/src/Ganeti/HTools/Cluster.hs > index de7f1fb..7b4a67c 100644 > --- a/src/Ganeti/HTools/Cluster.hs > +++ b/src/Ganeti/HTools/Cluster.hs > @@ -847,7 +847,7 @@ findBestAllocGroup mggl mgnl mgil allowed_gdxs inst > cnt = > (gr, genAllocNodes mggl nl cnt False >>= > tryAlloc nl il inst)) > groups''::[(Group.Group, Result AllocSolution)] > - all_msgs = filter_group_msgs ++ (concatMap solutionDescription sols) > + all_msgs = filter_group_msgs ++ concatMap solutionDescription sols > goodSols = filterMGResults sols > sortedSols = sortMGResults goodSols > in case sortedSols of > diff --git a/test/data/htools/hail-alloc-invalid-network.json > b/test/data/htools/hail-alloc-invalid-network.json > new file mode 100644 > index 0000000..72d5cbb > --- /dev/null > +++ b/test/data/htools/hail-alloc-invalid-network.json > @@ -0,0 +1,155 @@ > +{ > + "cluster_tags": [], > + "instances": {}, > + "ipolicy": { > + "max": { > + "disk-size": 2048 > + }, > + "min": { > + "disk-size": 1024 > + } > + }, > + "nodegroups": { > + "uuid-group-1": { > + "alloc_policy": "preferred", > + "ipolicy": { > + "disk-templates": [ > + "drbd" > + ], > + "minmax": [ > + { > + "max": { > + "cpu-count": 2, > + "disk-count": 8, > + "disk-size": 2048, > + "memory-size": 12800, > + "nic-count": 8, > + "spindle-use": 8 > + }, > + "min": { > + "cpu-count": 1, > + "disk-count": 1, > + "disk-size": 1024, > + "memory-size": 128, > + "nic-count": 1, > + "spindle-use": 1 > + } > + } > + ], > + "spindle-ratio": 32.0, > + "std": { > + "cpu-count": 1, > + "disk-count": 1, > + "disk-size": 1024, > + "memory-size": 128, > + "nic-count": 1, > + "spindle-use": 1 > + }, > + "vcpu-ratio": 4.0 > + }, > + "name": "Group 1", > + "networks": ["uuid-net-1-1", "uuid-net-1-2"], > + "tags": [] > + }, > + "uuid-group-2": { > + "alloc_policy": "preferred", > + "ipolicy": { > + "disk-templates": [ > + "file" > + ], > + "minmax": [ > + { > + "max": { > + "cpu-count": 2, > + "disk-count": 8, > + "disk-size": 2048, > + "memory-size": 12800, > + "nic-count": 8, > + "spindle-use": 8 > + }, > + "min": { > + "cpu-count": 1, > + "disk-count": 1, > + "disk-size": 1024, > + "memory-size": 128, > + "nic-count": 1, > + "spindle-use": 1 > + } > + } > + ], > + "spindle-ratio": 32.0, > + "std": { > + "cpu-count": 1, > + "disk-count": 1, > + "disk-size": 1024, > + "memory-size": 128, > + "nic-count": 1, > + "spindle-use": 1 > + }, > + "vcpu-ratio": 4.0 > + }, > + "name": "Group 2", > + "networks": ["uuid-net-2-1", "uuid-net-2-2", "uuid-net-2-3"], > + "tags": [] > + } > + }, > + "nodes": { > + "node1_1": { > + "drained": false, > + "free_disk": 7168, > + "free_memory": 4096, > + "group": "uuid-group-1", > + "ndparams": { > + "spindle_count": 1 > + }, > + "offline": false, > + "reserved_memory": 1017, > + "total_cpus": 4, > + "total_disk": 7168, > + "total_memory": 4096 > + }, > + "node2_1": { > + "drained": false, > + "free_disk": 7168, > + "free_memory": 4096, > + "group": "uuid-group-2", > + "ndparams": { > + "spindle_count": 1 > + }, > + "offline": false, > + "reserved_memory": 1017, > + "total_cpus": 4, > + "total_disk": 7168, > + "total_memory": 4096 > + } > + }, > + "request": { > + "disk_space_total": 1536, > + "disk_template": "file", > + "disks": [ > + { > + "size": 1536 > + } > + ], > + "memory": 1024, > + "name": "instance1", > + "required_nodes": 1, > + "spindle_use": 2, > + "nics":[ > + { > + "mac":"aa:00:00:85:f3:a7", > + "network":"uuid-net-1-1", > + "nicparams":{} > + }, > + { > + "mac":"aa:00:00:85:f3:a8", > + "network":"uuid-net-1-2", > + "nicparams":{} > + } > + ], > + "tags": [], > + "type": "allocate", > + "vcpus": 1 > + }, > + "version": 2 > +} > diff --git a/test/data/htools/hail-alloc-restricted-network.json > b/test/data/htools/hail-alloc-restricted-network.json > new file mode 100644 > index 0000000..988d0fc > --- /dev/null > +++ b/test/data/htools/hail-alloc-restricted-network.json > @@ -0,0 +1,277 @@ > +{ > + "cluster_tags": [], > + "instances": { > + "instance1": { > + "disks": [ > + { > + "mode": "rw", > + "size": 1024 > + } > + ], > + "disk_space_total": 1024, > + "hypervisor": "xen-pvm", > + "tags": [], > + "nics": [ > + { > + "ip": null, > + "mac": "aa:00:00:eb:0b:a5", > + "link": "xen-br0", > + "mode": "bridged", > + "bridge": "xen-br0" > + } > + ], > + "vcpus": 1, > + "spindle_use": 1, > + "admin_state": "down", > + "disk_template": "drbd", > + "memory": 128, > + "nodes": [ > + "node1_1", > + "node1_2" > + ], > + "os": "debian-image" > + }, > + "instance2": { > + "disks": [ > + { > + "mode": "rw", > + "size": 1024 > + } > + ], > + "disk_space_total": 1024, > + "hypervisor": "xen-pvm", > + "tags": [], > + "nics": [ > + { > + "ip": null, > + "mac": "aa:00:00:eb:0b:a5", > + "link": "xen-br0", > + "mode": "bridged", > + "bridge": "xen-br0" > + } > + ], > + "vcpus": 1, > + "spindle_use": 1, > + "admin_state": "down", > + "disk_template": "drbd", > + "memory": 128, > + "nodes": [ > + "node1_2", > + "node1_1" > + ], > + "os": "debian-image" > + }, > + "instance2": { > + "disks": [ > + { > + "mode": "rw", > + "size": 1024 > + } > + ], > + "disk_space_total": 1024, > + "hypervisor": "xen-pvm", > + "tags": [], > + "nics": [ > + { > + "ip": null, > + "mac": "aa:00:00:eb:0b:a5", > + "link": "xen-br0", > + "mode": "bridged", > + "bridge": "xen-br0" > + } > + ], > + "vcpus": 1, > + "spindle_use": 1, > + "admin_state": "down", > + "disk_template": "drbd", > + "memory": 128, > + "nodes": [ > + "node1_1", > + "node1_2" > + ], > + "os": "debian-image" > + } > + }, > + "ipolicy": { > + "max": { > + "disk-size": 2048 > + }, > + "min": { > + "disk-size": 1024 > + } > + }, > + "nodegroups": { > + "uuid-group-1": { > + "alloc_policy": "last_resort", > + "ipolicy": { > + "disk-templates": [ > + "drbd" > + ], > + "minmax": [ > + { > + "max": { > + "cpu-count": 2, > + "disk-count": 8, > + "disk-size": 2048, > + "memory-size": 12800, > + "nic-count": 8, > + "spindle-use": 8 > + }, > + "min": { > + "cpu-count": 1, > + "disk-count": 1, > + "disk-size": 1024, > + "memory-size": 128, > + "nic-count": 1, > + "spindle-use": 1 > + } > + } > + ], > + "spindle-ratio": 32.0, > + "std": { > + "cpu-count": 1, > + "disk-count": 1, > + "disk-size": 1024, > + "memory-size": 128, > + "nic-count": 1, > + "spindle-use": 1 > + }, > + "vcpu-ratio": 4.0 > + }, > + "name": "Group 1", > + "networks": ["uuid-net-1-1", "uuid-net-1-2"], > + "tags": [] > + }, > + "uuid-group-2": { > + "alloc_policy": "preferred", > + "ipolicy": { > + "disk-templates": [ > + "drbd" > + ], > + "minmax": [ > + { > + "max": { > + "cpu-count": 2, > + "disk-count": 8, > + "disk-size": 2048, > + "memory-size": 12800, > + "nic-count": 8, > + "spindle-use": 8 > + }, > + "min": { > + "cpu-count": 1, > + "disk-count": 1, > + "disk-size": 1024, > + "memory-size": 128, > + "nic-count": 1, > + "spindle-use": 1 > + } > + } > + ], > + "spindle-ratio": 32.0, > + "std": { > + "cpu-count": 1, > + "disk-count": 1, > + "disk-size": 1024, > + "memory-size": 128, > + "nic-count": 1, > + "spindle-use": 1 > + }, > + "vcpu-ratio": 4.0 > + }, > + "name": "Group 2", > + "networks": ["uuid-net-2-1", "uuid-net-2-2", "uuid-net-2-3"], > + "tags": [] > + } > + }, > + "nodes": { > + "node1_1": { > + "drained": false, > + "free_disk": 4096, > + "free_memory": 3840, > + "group": "uuid-group-1", > + "ndparams": { > + "spindle_count": 1 > + }, > + "offline": false, > + "reserved_memory": 1017, > + "total_cpus": 4, > + "total_disk": 7168, > + "total_memory": 4096 > + }, > + "node1_2": { > + "drained": false, > + "free_disk": 4096, > + "free_memory": 3968, > + "group": "uuid-group-1", > + "ndparams": { > + "spindle_count": 1 > + }, > + "offline": false, > + "reserved_memory": 1017, > + "total_cpus": 4, > + "total_disk": 7168, > + "total_memory": 32763 > + }, > + "node2_1": { > + "drained": false, > + "free_disk": 7168, > + "free_memory": 4096, > + "group": "uuid-group-2", > + "ndparams": { > + "spindle_count": 1 > + }, > + "offline": false, > + "reserved_memory": 1017, > + "total_cpus": 4, > + "total_disk": 7168, > + "total_memory": 4096 > + }, > + "node2_2": { > + "drained": false, > + "free_disk": 7168, > + "free_memory": 4096, > + "group": "uuid-group-2", > + "ndparams": { > + "spindle_count": 1 > + }, > + "offline": false, > + "reserved_memory": 1017, > + "total_cpus": 4, > + "total_disk": 7168, > + "total_memory": 4096 > + } > + }, > + "request": { > + "disk_space_total": 3072, > + "disk_template": "drbd", > + "disks": [ > + { > + "size": 1536 > + }, > + { > + "size": 1536 > + } > + ], > + "memory": 1024, > + "name": "instance1", > + "required_nodes": 2, > + "spindle_use": 2, > + "nics":[ > + { > + "mac":"aa:00:00:85:f3:a7", > + "network":"uuid-net-1-1", > + "nicparams":{} > + }, > + { > + "mac":"aa:00:00:85:f3:a8", > + "network":"uuid-net-1-2", > + "nicparams":{} > + } > + ], > + "tags": [], > + "type": "allocate", > + "vcpus": 1 > + }, > + "version": 2 > +} > diff --git a/test/hs/shelltests/htools-hail.test > b/test/hs/shelltests/htools-hail.test > index 4da03d8..dbaba53 100644 > --- a/test/hs/shelltests/htools-hail.test > +++ b/test/hs/shelltests/htools-hail.test > @@ -47,6 +47,16 @@ echo '{"request": 0}' | ./test/hs/hail - > >>> /"success":false,.*FailDisk: 1/ > >>>= 0 > > +# check that hail honors network requirements > +./test/hs/hail $TESTDATA_DIR/hail-alloc-restricted-network.json > +>>> /"success":true,"info":"Request successful: Selected group: Group 1.*/ > +>>>= 0 > + > +# check that hail fails if no nodegroup can meet network and disk > template requirements > +./test/hs/hail $TESTDATA_DIR/hail-alloc-invalid-network.json > +>>> /"success":false,/ > +>>>= 0 > + > Is there any way to pass the request and the cluster from different files? (or could we make up one, eg. with concatenation?) Rationale: we should check with two requests differing only in the "network" field, and verify the change. This works, but could fail for an independent reason and we may not notice. Thanks, Guido
