Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Jobsub subcomand parser and API interface #594

Open
wants to merge 20 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .pylintrc
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ ignore-patterns=^\.#

# Python code to execute, usually for sys.path manipulation such as
# pygtk.require().
#init-hook=
init-hook=import sys; sys.path.append("lib")

# Use multiple processes to speed up Pylint. Specifying 0 will auto-detect the
# number of processors available to use.
Expand Down Expand Up @@ -594,5 +594,5 @@ valid-metaclass-classmethod-first-arg=cls

# Exceptions that will emit a warning when being caught. Defaults to
# "BaseException, Exception".
overgeneral-exceptions=BaseException,
Exception
overgeneral-exceptions=builtins.BaseException,
builtins.Exception
2 changes: 1 addition & 1 deletion bin/condor_submit
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ def main():
os.environ["_condor_SEC_CREDENTIAL_STORER"] = f"{bindir}/condor_vault_storer"
# END PATCH

condor_parser = get_parser.get_submit_parser(add_condor_epilog=True)
condor_parser = get_parser.get_submit_parser()

condor_parser.add_argument(
"-spool",
Expand Down
4 changes: 3 additions & 1 deletion bin/condor_submit_dag
Original file line number Diff line number Diff line change
Expand Up @@ -59,14 +59,16 @@ def main():
bindir = os.path.abspath(os.path.dirname(__file__))
os.environ["_condor_SEC_CREDENTIAL_STORER"] = f"{bindir}/condor_vault_storer"

parser = get_parser.get_submit_parser(add_condor_epilog=True)
parser = get_parser.get_submit_parser()

arglist, cmd_args = parser.parse_known_args()

# pull dag file out of args
if len(cmd_args):
f = cmd_args[-1]
cmd_args = cmd_args[:-1]
else:
raise SystemExit("Filename argument is required.")
shreyb marked this conversation as resolved.
Show resolved Hide resolved

varg = vars(arglist)
cred_set = get_creds(varg)
Expand Down
111 changes: 58 additions & 53 deletions bin/jobsub
Original file line number Diff line number Diff line change
@@ -1,64 +1,69 @@
#!/usr/bin/python3 -I
import argparse
import os
import os.path
import sys

with os.popen(os.environ.get("PAGER", "less"), "w") as f:
print(
"""
Available jobsub_lite commands are:
if os.environ.get("LD_LIBRARY_PATH", ""):
os.environ["HIDE_LD_LIBRARY_PATH"] = os.environ["LD_LIBRARY_PATH"]
del os.environ["LD_LIBRARY_PATH"]
os.execv(sys.argv[0], sys.argv)

jobsub_submit [-G experiment] [options] script-url [script arguments]
submit jobs/dags to the Grid
jobsub_q [-G experiment] [options]
show queued/running jobs
jobsub_fetchlog [-G experiment] [options] jobid ...
fetch job output logs
jobsub_history
show completed jobs
jobsub_hold
jobsub_release
jobsub_rm
Mangage job queue/abort jobs
decode_token.sh
Print JSON dump of token files
PREFIX = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

All josub_lite commands will print usage with --help, and
"man jobsub_..." will give a manual page, or see:
https://fifewiki.fnal.gov/wiki/Jobsub_Lite#User_Documentation
sys.path.append(os.path.join(PREFIX, "lib"))

jobsub_lite also wraps the following condor commands to accept '-G group':
# type: ignore[implicit-reexport]
# pylint: disable=wrong-import-position,ungrouped-imports,import-error
from mains import (
jobsub_submit_args,
jobsub_cmd_args,
jobsub_fetchlog_args,
jobsub_cmd_parser,
jobsub_fetchlog_parser,
VERBOSE,
)

condor_q condor_submit_dag
condor_release condor_vault_storer
condor_rm condor_wait
condor_submit condor_transfer_data
from get_parser import (
get_parser,
get_condor_epilog,
)
from tracing import as_span

All condor commands will print usage with -help and
"man condor_..." will give a manual page, or see:
https://htcondor.readthedocs.io/en/latest/man-pages/index.html

jobsub_lite commands are affected by many environment variables, particularly:
@as_span(os.path.basename(f"{sys.argv[0]}_{sys.argv[1]}"), is_main=True)
def main():
top_parser = argparse.ArgumentParser()
subparsers = top_parser.add_subparsers()
for sc in ("submit", "submit_dag"):
sub_parser = get_parser(parser=subparsers.add_parser(sc))
sub_parser.set_defaults(command=f"jobsub_{sc}")
sub_parser.set_defaults(func=jobsub_submit_args)

BEARER_TOKEN_FILE
location of authentication token (SciToken)
CMTCONFIG
directory used for job submission sandboxes (default $HOME/.config)
GROUP
(or JOBSUB_GROUP) default value for -G flag
HOME
home directory
LD_LIBRARY_PATH
Generally ignored, but can crash /usr/bin/python3 in rare cases
OTEL_EXPORTER_JAEGER_ENDPOINT
Where to send debug traces
TMPDIR
Where to make temporary files
USER
Username
X509_USER_PROXY
Location of old globus grid proxy
for sc in ("q", "hold", "release", "rm", "wait"):
sub_parser = jobsub_cmd_parser(
sc == "q",
parser=subparsers.add_parser(
sc,
formatter_class=argparse.RawDescriptionHelpFormatter,
epilog=get_condor_epilog(f"condor_{sc}"),
),
)
sub_parser.set_defaults(command=f"jobsub_{sc}")
sub_parser.set_defaults(func=jobsub_cmd_args)
sub_parser = jobsub_fetchlog_parser(parser=subparsers.add_parser("fetchlog"))
sub_parser.set_defaults(command="jobsub_fetchlog")
sub_parser.set_defaults(func=jobsub_fetchlog_args)

Numerous other environment variables starting with _condor_... or
JOBSUB_... can affect job submission, specify default options, etc.
""",
file=f,
)
args, passthru = top_parser.parse_known_args()
args.func(args, passthru)


if __name__ == "__main__":
try:
main()
except Exception as e: # pylint: disable=broad-except
if VERBOSE:
raise
sys.stderr.write(f"\n\nError: {e.__class__.__name__}: {str(e)}\n\n")
sys.exit(1)
2 changes: 1 addition & 1 deletion bin/jobsub_cleanup_cred
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ def del_cred(schedd: str, token_name: str, no_delete: bool = False) -> None:


def main():
parser = get_parser.get_jobid_parser(add_condor_epilog=False)
parser = get_parser.get_jobid_parser()
parser.add_argument(
"--force", help="Force deletion", default=False, action="store_true"
)
Expand Down
Loading