Example #1
0
    def run(self, args):
        """Run 'create' subcommand."""
        optparser = CreateOptions(go_args=args,
                                  envvar_prefix=self.envvar_prefix,
                                  usage=self.usage_txt)
        options = optparser.options
        if not validate_pbs_option(options):
            sys.stderr.write('Missing config options. Exiting.\n')
            return 1

        label = options.label

        if not hc.validate_label(label, hc.known_cluster_labels()):
            sys.exit(1)

        if not hc.validate_hodconf_or_dist(options.hodconf, options.dist):
            sys.exit(1)

        try:
            j = PbsHodJob(optparser)
            hc.report_cluster_submission(label)
            j.run()
            jobs = j.state()
            hc.post_job_submission(label, jobs, optparser.options.workdir)
        except StandardError as err:
            self._log_and_raise(err)

        return 0
Example #2
0
    def run(self, args):
        """Run 'create' subcommand."""
        optparser = CreateOptions(go_args=args, envvar_prefix=self.envvar_prefix, usage=self.usage_txt)
        options = optparser.options
        if not validate_pbs_option(options):
            sys.stderr.write('Missing config options. Exiting.\n')
            return 1

        label = options.label

        if not hc.validate_label(label, hc.known_cluster_labels()):
            sys.exit(1)

        if not hc.validate_hodconf_or_dist(options.hodconf, options.dist):
            sys.exit(1)

        try:
            j = PbsHodJob(optparser)
            hc.report_cluster_submission(label)
            j.run()
            jobs = j.state()
            hc.post_job_submission(label, jobs, optparser.options.workdir)
        except StandardError as err:
            self._log_and_raise(err)

        return 0
Example #3
0
    def run(self, args):
        """Run 'create' subcommand."""
        optparser = CreateOptions(go_args=args, envvar_prefix=self.envvar_prefix, usage=self.usage_txt)
        options = optparser.options
        if not validate_pbs_option(options):
            sys.stderr.write('Missing config options. Exiting.\n')
            return 1

        label = options.label

        if not hc.validate_label(label, hc.known_cluster_labels()):
            sys.exit(1)

        if not hc.validate_hodconf_or_dist(options.hodconf, options.dist):
            sys.exit(1)

        try:
            j = PbsHodJob(optparser)
            hc.report_cluster_submission(label)
            j.run()
            jobs = j.state()
            hc.post_job_submission(label, jobs, optparser.options.workdir)
            return 0
        except StandardError as e:
            fancylogger.setLogFormat(fancylogger.TEST_LOGGING_FORMAT)
            fancylogger.logToScreen(enable=True)
            _log.raiseException(e.message)
Example #4
0
    def test_known_cluster_labels(self):
        with patch('hod.cluster.cluster_info_dir', return_value='/'):
            with patch('os.path.exists', return_value=True):
                with patch('os.listdir', return_value=['a']):
                    with patch('os.path.isdir', return_value=True):
                        self.assertEqual(['a'], hc.known_cluster_labels())

        with patch('hod.cluster.cluster_info_dir', return_value='/'):
            with patch('os.path.exists', return_value=True):
                with patch('os.listdir', return_value=['notadir']):
                    with patch('os.path.isdir', return_value=False):
                        self.assertEqual([], hc.known_cluster_labels())

        tmpdir = tempfile.mkdtemp()
        testdir = os.path.join(tmpdir, 'test123')
        os.mkdir(testdir)
        with patch('hod.cluster.cluster_info_dir', return_value=tmpdir):
            self.assertEqual(['test123'], hc.known_cluster_labels())
Example #5
0
 def run(self, args):
     """Run 'clean' subcommand."""
     optparser = CleanOptions(go_args=args, envvar_prefix=self.envvar_prefix, usage=self.usage_txt)
     try:
         pbs = rm_pbs.Pbs(optparser)
         state = pbs.state()
         labels = hc.known_cluster_labels()
         rm_master = rm_pbs.master_hostname()
         info = hc.mk_cluster_info_dict(labels, state, master=rm_master)
         hc.clean_cluster_info(rm_master, info)
     except StandardError as err:
         fancylogger.setLogFormat(fancylogger.TEST_LOGGING_FORMAT)
         fancylogger.logToScreen(enable=True)
         _log.raiseException(err.message)
Example #6
0
    def run(self, args):
        """Run 'clean' subcommand."""
        optparser = CleanOptions(go_args=args, envvar_prefix=self.envvar_prefix, usage=self.usage_txt)
        try:
            pbs = rm_pbs.Pbs(optparser)
            state = pbs.state()
            labels = hc.known_cluster_labels()
            rm_master = rm_pbs.master_hostname()
            info = hc.mk_cluster_info_dict(labels, state, master=rm_master)
            hc.clean_cluster_info(rm_master, info)
        except StandardError as err:
            self._log_and_raise(err)

        return 0
Example #7
0
    def run(self, args):
        """Run 'batch' subcommand."""
        optparser = BatchOptions(go_args=args,
                                 envvar_prefix=self.envvar_prefix,
                                 usage=self.usage_txt)
        options = optparser.options
        if not validate_pbs_option(options):
            sys.stderr.write('Missing config options. Exiting.\n')
            return 1

        if optparser.options.script is None:
            sys.stderr.write('Missing script. Exiting.\n')
            return 1

        # resolve script path to absolute path
        optparser.options.script = os.path.abspath(optparser.options.script)

        if not os.path.exists(optparser.options.script):
            sys.stderr.write(
                "Specified script does not exist: %s. Exiting.\n" %
                optparser.options.script)
            return 1

        # make sure script is executable
        cur_perms = os.stat(optparser.options.script)[stat.ST_MODE]
        if not (cur_perms & stat.S_IXUSR):
            print "Specified script %s is not executable yet, fixing that..." % optparser.options.script
            os.chmod(optparser.options.script, cur_perms | stat.S_IXUSR)

        label = options.label

        if not hc.validate_label(label, hc.known_cluster_labels()):
            sys.exit(1)

        if not hc.validate_hodconf_or_dist(options.hodconf, options.dist):
            sys.exit(1)

        try:
            j = PbsHodJob(optparser)
            hc.report_cluster_submission(label)
            j.run()
            jobs = j.state()
            hc.post_job_submission(label, jobs, optparser.options.workdir)
        except StandardError as err:
            self._log_and_raise(err)

        return 0
Example #8
0
    def run(self, args):
        """Run 'batch' subcommand."""
        optparser = BatchOptions(go_args=args, envvar_prefix=self.envvar_prefix, usage=self.usage_txt)
        options = optparser.options
        if not validate_pbs_option(options):
            sys.stderr.write('Missing config options. Exiting.\n')
            return 1

        if optparser.options.script is None:
            sys.stderr.write('Missing script. Exiting.\n')
            return 1

        # resolve script path to absolute path
        optparser.options.script = os.path.abspath(optparser.options.script)

        if not os.path.exists(optparser.options.script):
            sys.stderr.write("Specified script does not exist: %s. Exiting.\n" % optparser.options.script)
            return 1

        # make sure script is executable
        cur_perms = os.stat(optparser.options.script)[stat.ST_MODE]
        if not (cur_perms & stat.S_IXUSR):
            print "Specified script %s is not executable yet, fixing that..." % optparser.options.script
            os.chmod(optparser.options.script, cur_perms|stat.S_IXUSR)

        label = options.label

        if not hc.validate_label(label, hc.known_cluster_labels()):
            sys.exit(1)

        if not hc.validate_hodconf_or_dist(options.hodconf, options.dist):
            sys.exit(1)

        try:
            j = PbsHodJob(optparser)
            hc.report_cluster_submission(label)
            j.run()
            jobs = j.state()
            hc.post_job_submission(label, jobs, optparser.options.workdir)
            return 0
        except StandardError as e:
            fancylogger.setLogFormat(fancylogger.TEST_LOGGING_FORMAT)
            fancylogger.logToScreen(enable=True)
            _log.raiseException(e.message)
Example #9
0
    def run(self, args):
        """Run 'list' subcommand."""
        optparser = ListOptions(go_args=args, envvar_prefix=self.envvar_prefix, usage=self.usage_txt)
        try:
            pbs = rm_pbs.Pbs(optparser)
            state = pbs.state()
            labels = hc.known_cluster_labels()
            info = hc.mk_cluster_info_dict(labels, state)
            if not info:
                print 'No jobs found'
                sys.exit(0)

            headers = ['Cluster label', 'Job ID', 'State', 'Hosts']
            info_rows = format_list_rows(info)
            print ht.format_table(info_rows, headers)
        except StandardError as err:
            self._log_and_raise(err)

        return 0
Example #10
0
    def run(self, args):
        """Run 'relabel' subcommand."""
        optparser = RelabelOptions(go_args=args, envvar_prefix=self.envvar_prefix, usage=self.usage_txt)
        try:
            if len(optparser.args) != 3:
                self.report_error(self.usage())

            labels = hc.known_cluster_labels()
            if optparser.args[1] not in labels:
                self.report_error("Cluster with label '%s' not found", optparser.args[1])

            try:
                hc.mv_cluster_info(optparser.args[1], optparser.args[2])
            except (IOError, OSError) as err:
                self.report_error("Could not change label '%s' to '%s': %s", optparser.args[1], optparser.args[2], err)
        except StandardError as err:
            self._log_and_raise(err)

        return 0
Example #11
0
    def run(self, args):
        """Run 'list' subcommand."""
        optparser = ListOptions(go_args=args, envvar_prefix=self.envvar_prefix, usage=self.usage_txt)
        try:
            pbs = rm_pbs.Pbs(optparser)
            state = pbs.state()
            labels = hc.known_cluster_labels()
            info = hc.mk_cluster_info_dict(labels, state)
            if not info:
                print 'No jobs found'
                sys.exit(0)

            headers = ['Cluster label', 'Job ID', 'State', 'Hosts']
            info_rows = format_list_rows(info)
            print ht.format_table(info_rows, headers)
        except StandardError as err:
            fancylogger.setLogFormat(fancylogger.TEST_LOGGING_FORMAT)
            fancylogger.logToScreen(enable=True)
            _log.raiseException(err)
        return 0
Example #12
0
    def run(self, args):
        """Run 'relabel' subcommand."""
        optparser = RelabelOptions(go_args=args, envvar_prefix=self.envvar_prefix, usage=self.usage_txt)
        try:
            if len(optparser.args) != 3:
                _log.error(self.usage())
                sys.exit(1)

            labels = hc.known_cluster_labels()
            if optparser.args[1] not in labels:
                _log.error("Cluster with label '%s' not found", optparser.args[1])
                sys.exit(1)
            try:
                hc.mv_cluster_info(optparser.args[1], optparser.args[2])
            except (IOError, OSError) as err:
                _log.error("Could not change label '%s' to '%s': %s", optparser.args[1], optparser.args[2], err)
                sys.exit(1)
        except StandardError as err:
            fancylogger.setLogFormat(fancylogger.TEST_LOGGING_FORMAT)
            fancylogger.logToScreen(enable=True)
            _log.raiseException(err)
        return 0
Example #13
0
    def run(self, args):
        """Run 'relabel' subcommand."""
        optparser = RelabelOptions(go_args=args,
                                   envvar_prefix=self.envvar_prefix,
                                   usage=self.usage_txt)
        try:
            if len(optparser.args) != 3:
                self.report_error(self.usage())

            labels = hc.known_cluster_labels()
            if optparser.args[1] not in labels:
                self.report_error("Cluster with label '%s' not found",
                                  optparser.args[1])

            try:
                hc.mv_cluster_info(optparser.args[1], optparser.args[2])
            except (IOError, OSError) as err:
                self.report_error("Could not change label '%s' to '%s': %s",
                                  optparser.args[1], optparser.args[2], err)
        except StandardError as err:
            self._log_and_raise(err)

        return 0
Example #14
0
 def test_known_cluster_labels_not_found(self):
     with patch('hod.cluster.cluster_info_dir', return_value='/'):
         with patch('os.path.exists', return_value=False):
             self.assertEqual([], hc.known_cluster_labels())
Example #15
0
 def test_known_cluster_labels(self):
     with patch('hod.cluster.cluster_info_dir', return_value='/'):
         with patch('os.path.exists', return_value=True):
             with patch('os.listdir', return_value=['a']):
                 self.assertEqual(['a'], hc.known_cluster_labels())
Example #16
0
 def test_known_cluster_labels_not_found(self):
     with patch('hod.cluster.cluster_info_dir', return_value='/'):
         with patch('os.path.exists', return_value=False):
             self.assertEqual([], hc.known_cluster_labels())