in gridengine/src/gridengine/cli.py [0:0]
def main(argv: Iterable[str] = None) -> None:
default_install_dir = os.path.join("/", "opt", "cycle", "gridengine")
parser = ArgumentParser()
sub_parsers = parser.add_subparsers()
def csv_list(x: str) -> List[str]:
return [x.strip() for x in x.split(",")]
help_msg = io.StringIO()
def add_parser(
name: str, func: Callable, read_only: bool = True, skip_config: bool = False
) -> ArgumentParser:
doc_str = (func.__doc__ or "").strip()
doc_str = " ".join([x.strip() for x in doc_str.splitlines()])
help_msg.write("\n {:20} - {}".format(name, doc_str))
default_config: Optional[str]
default_config = os.path.join(default_install_dir, "autoscale.json")
if not os.path.exists(default_config):
default_config = None
new_parser = sub_parsers.add_parser(name)
new_parser.set_defaults(func=func, read_only=read_only)
if skip_config:
return new_parser
new_parser.add_argument(
"--config", "-c", default=default_config, required=not bool(default_config)
)
return new_parser
def str_list(c: str) -> List[str]:
return c.split(",")
def add_parser_with_columns(
name: str, func: Callable, read_only: bool = True
) -> ArgumentParser:
parser = add_parser(name, func, read_only)
def parse_format(c: str) -> str:
c = c.lower()
if c in ["json", "table", "table_headerless"]:
return c
print("Expected json, table or table_headerless - got", c, file=sys.stderr)
sys.exit(1)
parser.add_argument("--output-columns", "-o", type=str_list)
parser.add_argument("--output-format", "-F", type=parse_format)
return parser
add_parser_with_columns("autoscale", autoscale, read_only=False)
add_parser_with_columns("buckets", buckets).add_argument(
"--constraint-expr", "-C", default="[]"
)
add_parser("complexes", complexes).add_argument(
"-a", "--include-irrelevant", action="store_true", default=False
)
delete_parser = add_parser("delete_nodes", delete_nodes, read_only=False)
delete_parser.add_argument("-H", "--hostnames", type=str_list, default=[])
delete_parser.add_argument("-N", "--node-names", type=str_list, default=[])
delete_parser.add_argument("--force", action="store_true", default=False)
remove_parser = add_parser("remove_nodes", remove_nodes, read_only=False)
remove_parser.add_argument("-H", "--hostnames", type=str_list, default=[])
remove_parser.add_argument("-N", "--node-names", type=str_list, default=[])
remove_parser.add_argument("--force", action="store_true", default=False)
add_parser_with_columns("demand", demand).add_argument(
"--jobs", "-j", default=None, required=False
)
add_parser("drain_node", drain_node, read_only=False).add_argument(
"-H", "--hostname", required=True
)
initconfig_parser = add_parser(
"initconfig", initconfig, read_only=False, skip_config=True
)
initconfig_parser.add_argument("--cluster-name", required=True)
initconfig_parser.add_argument("--username", required=True)
initconfig_parser.add_argument("--password")
initconfig_parser.add_argument("--url", required=True)
initconfig_parser.add_argument(
"--log-config",
default=os.path.join(default_install_dir, "logging.conf"),
dest="logging__config_file",
)
initconfig_parser.add_argument(
"--lock-file", default=os.path.join(default_install_dir, "scalelib.lock")
)
initconfig_parser.add_argument(
"--default-resource",
type=json.loads,
action="append",
default=[],
dest="default_resources",
)
initconfig_parser.add_argument(
"--default-hostgroups",
type=json.loads,
action="append",
default=[],
dest="default_hostgroups",
)
initconfig_parser.add_argument(
"--relevant-complexes",
default=["slots", "slot_type", "exclusive"],
type=csv_list,
dest="gridengine__relevant_complexes",
)
initconfig_parser.add_argument(
"--idle-timeout", default=300, type=int, dest="idle_timeout"
)
initconfig_parser.add_argument(
"--boot-timeout", default=1800, type=int, dest="boot_timeout"
)
initconfig_parser.add_argument(
"--disable-pgs-for-pe",
default=[],
type=str,
action="append",
help="Disable creation of placement groups for a parallel environment. "
+ "This can be invoked more than once.",
dest="disable_pgs_for_pe",
)
initconfig_parser.add_argument(
"--hostgroup-constraint",
default=[],
action="append",
dest="hostgroup_constraints",
)
add_parser("jobs", jobs)
add_parser("jobs_and_nodes", jobs_and_nodes)
support_archive_parser = add_parser("support_archive", create_support_archive)
support_archive_parser.add_argument(
"--archive", "-a", default="gridengine_support-{}.tar.gz".format(time.time())
)
join_cluster_parser = add_parser("join_cluster", join_cluster)
join_cluster_parser.add_argument("-H", "--hostnames", type=str_list)
join_cluster_parser.add_argument("-N", "--nodenames", type=str_list)
add_parser_with_columns("nodes", nodes).add_argument(
"--constraint-expr", "-C", default="[]"
)
add_parser("scheduler_nodes", scheduler_nodes)
help_msg.write("\nadvanced usage:")
add_parser("validate", validate_func, read_only=True)
add_parser("queues", queues, read_only=True)
add_parser("shell", shell)
analyze_parser = add_parser("analyze", analyze)
analyze_parser.add_argument("--job-id", "-j", required=True)
analyze_parser.add_argument("--wide", "-w", action="store_true", default=False)
parser.usage = help_msg.getvalue()
args = parser.parse_args()
if not hasattr(args, "func"):
parser.print_help()
sys.exit(1)
# parse list of config paths to a single config
if hasattr(args, "config"):
try:
with open(args.config) as fr:
args.config = json.load(fr)
except Exception as e:
logging.error("Could not load config file %s: %s", args.config, e)
sys.exit(1)
logging.initialize_logging(args.config)
if args.read_only:
args.config["read_only"] = True
args.config["lock_file"] = None
kwargs = {}
for k in dir(args):
if k[0].islower() and k not in ["read_only", "func"]:
kwargs[k] = getattr(args, k)
try:
args.func(**kwargs)
except Exception as e:
print(str(e), file=sys.stderr)
if hasattr(e, "message"):
print(getattr(e, "message"), file=sys.stderr)
logging.debug("Full stacktrace", exc_info=sys.exc_info())
sys.exit(1)