Exemple #1
0
    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
Exemple #2
0
    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
Exemple #5
0
    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"])
Exemple #7
0
 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
 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