def stop_cluster(headers, cluster): nova = novaclient(headers) for node in cluster.nodes: try: nova.servers.delete(node.vm_id) logging.debug("vm '%s' has been stopped", node.vm_id) except Exception, e: logging.info("Can't stop vm '%s': %s", node.vm_id, e)
def launch_cluster(headers, cluster): nova = novaclient(headers) clmap = dict() clmap["id"] = cluster.id clmap["name"] = cluster.name clmap["image"] = _find_by_id(nova.images.list(), cluster.base_image_id) _check_finding(clmap["image"], "id", cluster.base_image_id) clmap["nodes"] = [] num = 1 for nc in cluster.node_counts: configs = dict() for cf in nc.node_template.node_template_configs: name = cf.node_process_property.name configs[name] = cf.value ntype = nc.node_template.node_type.name templ_id = nc.node_template.id flv_id = nc.node_template.flavor_id flv = _find_by_name(nova.flavors.list(), flv_id) _check_finding(flv, "id", flv_id) for _ in xrange(0, nc.count): node = dict() if ntype == "JT+NN": node["name"] = "%s-master" % cluster.name else: node["name"] = "%s-%i" % (cluster.name, num) num += 1 node["type"] = ntype node["templ_id"] = templ_id node["flavor"] = flv node["configs"] = configs node["is_up"] = False clmap["nodes"].append(node) for node in clmap["nodes"]: logging.debug("Starting node for cluster '%s', node: %s, iamge: %s", cluster.name, node, clmap["image"]) _launch_node(nova, node, clmap["image"]) all_set = False logging.debug("All nodes for cluster '%s' have been started, " "waiting for them to come up", cluster.name) while not all_set: all_set = True for node in clmap["nodes"]: _check_if_up(nova, node) if not node["is_up"]: all_set = False time.sleep(1) logging.debug("All nodes of cluster '%s' are up: %s", cluster.name, all_set) _pre_cluster_setup(clmap) for node in clmap["nodes"]: _setup_node(node, clmap) _register_node(node, cluster) logging.debug("All nodes of cluster '%s' are configured and registered, " "starting the cluster...", cluster.name) _start_cluster(cluster, clmap)