示例#1
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
示例#2
0
    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
示例#6
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"])