def __provision_vm(self, name, sec_groups, spec, network, server_group_name=None): image_id = oaw.check_image_exists(self.nova_client, spec['image']) flavor_id = oaw.check_flavor_exists(self.nova_client, spec['flavor']) server_group_id = None if self.server_group_policy and server_group_name: server_group_id = oaw.check_server_group_exists( self.nova_client, server_group_name, [self.server_group_policy]) # network needs more logic. We accept the magic keyword 'default', which will then try to use the tenant's # default network labeled after the tenant name if network == 'default': network = os.environ['OS_TENANT_NAME'] network_id = oaw.check_network_exists(self.nova_client, network) print ' creating %s: %s - %s' % (name, spec['image'], spec['flavor']) print " using network '%s'" % network instance_id = oaw.create_vm(self.nova_client, name, image_id, flavor_id, spec['sec-key'], sec_groups, network_id, server_group_id) print ' instance %s created' % instance_id self.__prov_log('create', 'vm', instance_id, name) instance = oaw.get_instance(self.nova_client, instance_id) return instance
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 __provision_vm(self, name, sec_groups, spec, network, server_group_name=None): image_id = oaw.check_image_exists(self.nova_client, spec["image"]) flavor_id = oaw.check_flavor_exists(self.nova_client, spec["flavor"]) server_group_id = None if self.server_group_policy and server_group_name: server_group_id = oaw.check_server_group_exists( self.nova_client, server_group_name, [self.server_group_policy] ) # network needs more logic. We accept the magic keyword 'default', which will then try to use the tenant's # default network labeled after the tenant name if network == "default": network = os.environ["OS_TENANT_NAME"] network_id = oaw.check_network_exists(self.nova_client, network) print " creating %s: %s - %s" % (name, spec["image"], spec["flavor"]) print " using network '%s'" % network print " and key '%s'" % spec["sec-key"] instance_id = oaw.create_vm( self.nova_client, name, image_id, flavor_id, spec["sec-key"], sec_groups, network_id, server_group_id ) print " instance %s created" % instance_id self.__prov_log("create", "vm", instance_id, name) instance = oaw.get_instance(self.nova_client, instance_id) return instance
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 __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"])
def refresh_state(self): self.frontend = oaw.get_instance(self.nova_client, self.frontend.id) updated_nodes = [] for node in self.nodes: updated_nodes.append(oaw.get_instance(self.nova_client, node.id)) self.nodes = updated_nodes