Esempio n. 1
0
    def deploy_rs(self, args):
        """ Deploys and configures custom Abiquo Remote Services """
        parser = OptionParser(usage="scalability deploy-rs <options>")
        parser.add_option('-j', '--jenkins-version',
                help='Download the given version of the wars from Jenkins',
                action='store', dest='jenkins')
        parser.add_option('-r', '--rabbit', help='The RabbitMQ host',
                action='store', dest='rabbit')
        parser.add_option('-n', '--nfs', help='The NFS to mount',
                action='store', dest='nfs')
        parser.add_option('-c', '--count', type="int", default=1,
                help='Number of nodes to deploy (default 1)',
                action='store', dest='count')
        parser.add_option('-s', '--hypervisor-sessions', type="int", default=2,
                help='Number of concurrent hypervisor sessions (default 2)',
                action='store', dest='hypervisorsessions')
        parser.add_option('-l', '--list', help='Upload only those wars (default all rs)',
                default='rs', action='store', dest='wars')
        (options, args) = parser.parse_args(args)

        if not options.jenkins or not options.nfs or not options.rabbit:
            parser.print_help()
            return

        compute = self._context.getComputeService()

        try:
            name = self.__config.get("deploy-rs", "template")
            log.info("Loading template...")
            vdc, template_options = self._template_options(compute,
                "deploy-rs")
            template_options.overrideCores(
                self.__config.getint("deploy-rs", "template_cores"))
            template_options.overrideRam(
                self.__config.getint("deploy-rs", "template_ram"))
            template = compute.templateBuilder() \
                .imageNameMatches(name) \
                .locationId(vdc.getId()) \
                .options(template_options) \
                .build()

            java_opts = self.__config.get("deploy-rs", "tomcat_opts")
            boundary_org = self.__config.get("deploy-rs", "boundary_org")
            boundary_key = self.__config.get("deploy-rs", "boundary_key")
            newrelic_key = self.__config.get("deploy-rs", "newrelic_key")
            tomcat = TomcatScripts(boundary_org, boundary_key, newrelic_key)

            log.info("Deploying %s %s nodes to %s..." % (options.count,
                template.getImage().getName(), vdc.getDescription()))

            # Due to the IpPoolManagement concurrency issue, we need to deploy
            # the nodes one by one
            nodes = []
            responses = []
            for i in xrange(options.count):
                node = Iterables.getOnlyElement(
                    compute.createNodesInGroup("kahuna-rs", 1, template))
                log.info("Created node %s at %s" % (node.getName(),
                    Iterables.getOnlyElement(node.getPublicAddresses())))
                nodes.append(node)

                log.info("Cooking %s with Chef in the background..." %
                    node.getName())
                tomcat_config = {
                    "rabbit": options.rabbit,
                    "datacenter": node.getName(),
                    "nfs": options.nfs,
                    "nfs-mount": True,
                    "java-opts": java_opts,
                    "hypervisor-sessions": options.hypervisorsessions
                }
                install_tomcat = tomcat.install_and_configure(node,
                    tomcat_config, self._install_jenkins_wars(options.jenkins, options.wars))
                bootstrap = hostname.configure(node) + \
                    [ntp.install()] + redis.install("2.6.4") + install_tomcat
                responses.append(compute.submitScriptOnNode(node.getId(),
                    StatementList(bootstrap), RunScriptOptions.NONE))

            log.info("Waiting until all nodes are configured...")
            for i, future in enumerate(responses):
                result = future.get()
                log.info("%s node at %s -> %s" % (nodes[i].getName(),
                    Iterables.getOnlyElement(nodes[i].getPublicAddresses()),
                    "OK" if result.getExitStatus() == 0 else "FAILED"))
            log.info("Done!")

        except (AbiquoException, AuthorizationException), ex:
            print "Error: %s" % ex.getMessage()
Esempio n. 2
0
    def deploy_api(self, args):
        """ Deploys and configures custom Abiquo APIs """
        parser = OptionParser(usage="scalability deploy-api <options>")
        parser.add_option('-f', '--file',
                help='Path to a local api file to deploy',
                action='store', dest='file')
        parser.add_option('-j', '--jenkins-version',
                help='Download the api from the given version from Jenkins',
                action='store', dest='jenkins')
        parser.add_option('-d', '--datanode',
                help='Ip address of the data node (with rabbit, '
                'redis and zookeper)',
                action='store', dest='datanode')
        parser.add_option('-b', '--balancer',
                help='Ip address of the load balancer node',
                action='store', dest='balancer')
        parser.add_option('-c', '--count', type="int", default=1,
                help='Number of nodes to deploy (default 1)',
                action='store', dest='count')
        (options, args) = parser.parse_args(args)

        if options.file and options.jenkins:
            print "Cannot use -f and -j together"
            parser.print_help()
            return

        if not options.file and not options.jenkins \
                or not options.datanode or not options.balancer:
            parser.print_help()
            return

        compute = self._context.getComputeService()

        try:
            name = self.__config.get("deploy-api", "template")
            log.info("Loading template...")
            vdc, template_options = self._template_options(compute,
                "deploy-api")
            template_options.overrideCores(
                self.__config.getint("deploy-api", "template_cores"))
            template_options.overrideRam(
                self.__config.getint("deploy-api", "template_ram"))
            template = compute.templateBuilder() \
                .imageNameMatches(name) \
                .locationId(vdc.getId()) \
                .options(template_options) \
                .build()

            java_opts = self.__config.get("deploy-api", "tomcat_opts")
            boundary_org = self.__config.get("deploy-api", "boundary_org")
            boundary_key = self.__config.get("deploy-api", "boundary_key")
            newrelic_key = self.__config.get("deploy-api", "newrelic_key")
            tomcat = TomcatScripts(boundary_org, boundary_key, newrelic_key)

            log.info("Deploying %s %s nodes to %s..." % (options.count,
                template.getImage().getName(), vdc.getDescription()))

            # Due to the IpPoolManagement concurrency issue, we need to deploy
            # the nodes one by one
            nodes = []
            responses = []
            for i in xrange(options.count):
                node = Iterables.getOnlyElement(
                    compute.createNodesInGroup("kahuna-api", 1, template))
                log.info("Created node %s at %s" % (node.getName(),
                    Iterables.getOnlyElement(node.getPublicAddresses())))
                if options.file:
                    ssh.upload(self._context, node, "/tmp", options.file)
                nodes.append(node)

                log.info("Cooking %s with Chef in the background..." %
                    node.getName())
                tomcat_config = {
                    "rabbit": options.datanode,
                    "redis": options.datanode,
                    "zookeeper": options.datanode,
                    "module": "api",
                    "db-host": options.datanode,
                    #"syslog": options.balancer,
                    "ajp_port": 10000 + i,
                    "java-opts": java_opts
                }
                bootstrap = []
                bootstrap.extend(hostname.configure(node))
                bootstrap.append(ntp.install())
                if options.jenkins:
                    bootstrap.extend(jenkins._download_war(
                        options.jenkins, "api"))
                bootstrap.extend(tomcat.install_and_configure(node,
                    tomcat_config, self._install_local_wars))
                responses.append(compute.submitScriptOnNode(node.getId(),
                    StatementList(bootstrap), RunScriptOptions.NONE))

            log.info("Waiting until all nodes are configured...")
            for i, future in enumerate(responses):
                result = future.get()
                log.info("%s node at %s -> %s" % (nodes[i].getName(),
                    Iterables.getOnlyElement(nodes[i].getPublicAddresses()),
                    "OK" if result.getExitStatus() == 0 else "FAILED"))
            log.info("Done!")

        except (AbiquoException, AuthorizationException), ex:
            print "Error: %s" % ex.getMessage()