def testDiscard(self): """test RangeSet.discard()""" r1 = RangeSet("1-100,102,105-242,800") self.assertEqual(len(r1), 240) r1.discard(100) self.assertEqual(len(r1), 239) self.assertEqual(str(r1), "1-99,102,105-242,800") r1.discard(101) # should not raise KeyError # test remove integer-castable type (convenience) r1.remove("106") r1.discard("foo")
def testDiscard(self): """test RangeSet.discard()""" r1 = RangeSet("1-100,102,105-242,800") self.assertEqual(len(r1), 240) r1.discard(100) self.assertEqual(len(r1), 239) self.assertEqual(str(r1), "1-99,102,105-242,800") r1.discard(101) # should not raise KeyError # test remove integer-castable type (convenience) r1.remove("106") r1.discard("foo")
def testRemove(self): """test RangeSet.remove()""" r1 = RangeSet("1-100,102,105-242,800") self.assertEqual(len(r1), 240) r1.remove(100) self.assertEqual(len(r1), 239) self.assertEqual(str(r1), "1-99,102,105-242,800") self.assertRaises(KeyError, r1.remove, 101) # test remove integer-castable type (convenience) r1.remove("106") # non integer castable cases raise ValueError (documented since 1.6) self.assertRaises(ValueError, r1.remove, "foo")
def testRemove(self): """test RangeSet.remove()""" r1 = RangeSet("1-100,102,105-242,800") self.assertEqual(len(r1), 240) r1.remove(100) self.assertEqual(len(r1), 239) self.assertEqual(str(r1), "1-99,102,105-242,800") self.assertRaises(KeyError, r1.remove, 101) # test remove integer-castable type (convenience) r1.remove("106") # non integer castable cases raise ValueError (documented since 1.6) self.assertRaises(ValueError, r1.remove, "foo")
def select_nodes(self, profil, name, nb_nodes, host): '''Select nodes to spawn''' # 1: recover available nodelist # 2: select nb_nodes among availables nodes # 3: return the list of nodes err = "" nodes = [] if host is None: err = "Error: No host available\n" _LOGGER.error(err) self.rep_sock.send(msgpack.packb(('', [err]))) return nodes if not vc.VirtualCluster.valid_clustername(name): err = "Error: clustername '{}' is not a valid name\n".format(name) _LOGGER.error(err) self.rep_sock.send(msgpack.packb(('', [err]))) return nodes if profil not in self.profiles: err = "Error: Profil '{}' not found in configuration file\n".format( profil) _LOGGER.error(err) self.rep_sock.send(msgpack.packb(('', [err]))) return nodes nodelist = self.list_nodes(byhost=False) nodeset = NodeSet.fromlist([node.name for node in nodelist]) idx_min = 0 idx_max = nb_nodes - 1 base_range = RangeSet("%d-%d" % (idx_min, idx_max)) base_nodeset = NodeSetBase(name + '%s', base_range) ndset_inter = nodeset.intersection(base_nodeset) while len(ndset_inter) != 0: indexes = [ clustdock.VirtualNode.split_name(node)[1] for node in ndset_inter ] for idx in indexes: _LOGGER.debug("Removing %d from rangeset %s", idx, base_range) base_range.remove(idx) base_nodeset.difference_update(ndset_inter) _LOGGER.debug("Nodeset becomes '%s' after removing", base_nodeset) idx_min = max(indexes + list(base_range)) + 1 idx_max = idx_min + max([len(indexes), nb_nodes - len(base_range)]) base_range.add_range(idx_min, idx_max) _LOGGER.debug("New rangeset: %s", base_range) base_nodeset.update( NodeSetBase(name + '%s', RangeSet.fromlist([range(idx_min, idx_max)]))) _LOGGER.debug("New nodeset: %s", base_nodeset) ndset_inter = nodeset.intersection(base_nodeset) final_range = base_range _LOGGER.debug("final rangeset/nodeset: %s / %s", base_range, base_nodeset) cluster = vc.VirtualCluster(name, profil, self.profiles[profil]) nodes = [] for idx in final_range: node = cluster.add_node(idx, host) nodes.append(node) return nodes