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
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)
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())
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)
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
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
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)
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
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
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
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
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())
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())