def __provision_nodes(self, num_nodes): node_base = self.name + '-node' # asynchronous part for i in range(1, num_nodes + 1): node_name = '%s%02d' % (node_base, i) node = None for n in self.nodes: if n.name == node_name: node = n if node: print ' %s already provisioned' % node_name else: node = self.__provision_vm(node_name, [self.name + '-int'], self.config['node'], self.config['cluster']['network'], server_group_name=self.name) self.nodes.append(node) oaw.wait_for_state(self.nova_client, 'servers', node.id, 'BUILD|ACTIVE') print # synchronous part after nodes are active # indexed access because we'll replace the node instances with updated versions for i in range(0, len(self.nodes)): node = self.nodes[i] print ' setup network and volumes for %s' % node.name oaw.wait_for_state(self.nova_client, 'servers', node.id, 'ACTIVE') # reload information after instance has reached active state node = oaw.get_instance(self.nova_client, node.id) self.nodes[i] = node self.__provision_vm_addresses(node, self.config['node']) if 'volumes' in self.config['node']: self.__provision_volumes(node, self.config['node']['volumes']) print
def up(self, num_nodes): print print "Provisioning security groups" self.__provision_sec_groups() print print "Provisioning server group" self.__provision_server_group() print print "Provisioning cluster frontend" self.__provision_frontend() print print "Provisioning %d cluster nodes" % num_nodes self.__provision_nodes(num_nodes) # only wait for attaching if there are volumes to be attached. if 'volumes' in self.config['node']: print print "Checking volume attach state" for node in self.nodes: for vol in self.volumes: if not vol.display_name.startswith(node.name + '/'): continue print " %s" % vol.display_name oaw.wait_for_state(self.cinder_client, 'volumes', vol.id, 'in-use') print
def up(self, num_nodes): print print "Provisioning security groups" self.__provision_sec_groups() print print "Provisioning server group" self.__provision_server_group() print print "Provisioning cluster frontend" self.__provision_frontend() print print "Provisioning %d cluster nodes" % num_nodes self.__provision_nodes(num_nodes) # only wait for attaching if there are volumes to be attached. if "volumes" in self.config["node"]: print print "Checking volume attach state" for node in self.nodes: for vol in self.volumes: if not vol.display_name.startswith(node.name + "/"): continue print " %s" % vol.display_name oaw.wait_for_state(self.cinder_client, "volumes", vol.id, "in-use") print
def __provision_nodes_add(self, num_nodes): node_base = self.name + "-node" new_nodes = [] noldnodes = len(self.nodes) # asynchronous part nnew = 0 i = 1 while nnew < num_nodes: node_name = "%s%02d" % (node_base, i) node = None for n in self.nodes: if n.name == node_name: node = n if node: print " %s already provisioned" % node_name else: node = self.__provision_vm( node_name, [self.name + "-int"], self.config["node"], self.config["cluster"]["network"], server_group_name=self.name, ) self.nodes.append(node) new_nodes.append(node) oaw.wait_for_state(self.nova_client, "servers", node.id, "BUILD|ACTIVE") nnew += 1 i += 1 print # synchronous part after nodes are active # indexed access because we'll replace the node instances with updated versions for i in range(0, len(new_nodes)): node = new_nodes[i] print " setup network and volumes for %s" % node.name oaw.wait_for_state(self.nova_client, "servers", node.id, "ACTIVE") # reload information after instance has reached active state node = oaw.get_instance(self.nova_client, node.id) new_nodes[i] = node self.nodes[noldnodes + i] = node self.__provision_vm_addresses(node, self.config["node"]) if self.config["node"].get("volumes"): self.__provision_volumes(node, self.config["node"]["volumes"]) print return new_nodes
def add(self, num_nodes): print print "Provisioning %d cluster nodes" % num_nodes new_nodes = self.__provision_nodes_add(num_nodes) print print "Checking volume attach state" for node in new_nodes: for vol in self.volumes: if not vol.display_name.startswith(node.name + "/"): continue print " %s" % vol.display_name oaw.wait_for_state(self.cinder_client, "volumes", vol.id, "in-use") print return new_nodes
def __provision_frontend(self): fe_name = self.name + '-fe' if self.frontend: print ' %s already provisioned' % fe_name else: self.frontend = self.__provision_vm( fe_name, [self.name + '-ext', self.name + '-int'], self.config['frontend'], self.config['cluster']['network'], server_group_name=self.name) oaw.wait_for_state(self.nova_client, 'servers', self.frontend.id, 'ACTIVE') # reload information after instance has reached active state self.frontend = oaw.get_instance(self.nova_client, self.frontend.id) self.__provision_vm_addresses(self.frontend, self.config['frontend']) if 'volumes' in self.config['frontend']: self.__provision_volumes(self.frontend, self.config['frontend']['volumes'])
def __provision_frontend(self): fe_name = self.name + "-tron" if self.frontend: print " %s already provisioned" % fe_name else: self.frontend = self.__provision_vm( fe_name, [self.name + "-ext", self.name + "-int"], self.config["frontend"], self.config["cluster"]["network"], server_group_name=self.name, ) oaw.wait_for_state(self.nova_client, "servers", self.frontend.id, "ACTIVE") # reload information after instance has reached active state self.frontend = oaw.get_instance(self.nova_client, self.frontend.id) self.__provision_vm_addresses(self.frontend, self.config["frontend"]) if self.config["frontend"].get("volumes"): self.__provision_volumes(self.frontend, self.config["frontend"]["volumes"])