def load_parser_inspector(prev_parser: ArgumentParser, global_parser: ArgumentParser): inspector_cmd_sub_parsers = prev_parser.add_subparsers() from maro.cli.inspector.env_data_process import start_vis build_cmd_parser = inspector_cmd_sub_parsers.add_parser( "env", fromfile_prefix_chars="@", help="Dashboard of selected env displayed.", parents=[global_parser] ) build_cmd_parser.add_argument( "--source_path", type=str, required=True, help="Folder path to load data, should be root path of snapshot folders. e.g. ~/project_root/dump_files/" ) build_cmd_parser.add_argument( "--force", type=str, required=False, default="True", help="Overwrite the generated summary data or not: True/False." ) build_cmd_parser.set_defaults(func=start_vis)
def load_parser_data(prev_parser: ArgumentParser, global_parser: ArgumentParser): data_cmd_sub_parsers = prev_parser.add_subparsers() # BUILD from maro.cli.data_pipeline.utils import convert build_cmd_parser = data_cmd_sub_parsers.add_parser( "build", fromfile_prefix_chars="@", help="Build csv file to a strong type tight binary file.", parents=[global_parser]) build_cmd_parser.add_argument( "--meta", type=str, required=True, help="Metafile for binary file building.") build_cmd_parser.add_argument( "--file", type=str, required=True, nargs="+", help=""" Path to original csv file(s) used to build, you can save your files' name into a file and call with prefix @ to read files list from your file, like 'maro data build --meta meta.yml --output o.bin --file @files.txt' or just convert 1 file like 'maro data build --meta meta.yml --output o.bin --file input_file.csv' """) build_cmd_parser.add_argument( "--output", type=str, required=True, help="Path (with file name) to dump the binary file.") build_cmd_parser.add_argument( "--start-timestamp", dest="start_timestamp", type=int, default=None, required=False, help=""" Specified start timestamp (in UTC) for binary file, then this timestamp will be considered as tick=0 for binary reader, this can be used to adjust the reader pipeline. """) build_cmd_parser.set_defaults(func=convert)
def load_parser_process(prev_parser: ArgumentParser, global_parser: ArgumentParser) -> None: subparsers = prev_parser.add_subparsers() # maro process create from maro.cli.process.create import create parser_setup = subparsers.add_parser( "create", help="Create local process environment.", examples=CliExamples.MARO_PROCESS_SETUP, parents=[global_parser]) parser_setup.add_argument( 'deployment_path', help='Path of the local process setting deployment.', nargs='?', default=None) parser_setup.set_defaults(func=create) # maro process delete from maro.cli.process.delete import delete parser_setup = subparsers.add_parser( "delete", help= "Delete the local process environment. Including closing agents and maro Redis.", parents=[global_parser]) parser_setup.set_defaults(func=delete) # maro process job parser_job = subparsers.add_parser("job", help="Manage jobs", parents=[global_parser]) parser_job.set_defaults(func=_help_func(parser=parser_job)) parser_job_subparsers = parser_job.add_subparsers() # maro process job start from maro.cli.process.job import start_job parser_job_start = parser_job_subparsers.add_parser( 'start', help='Start a training job', examples=CliExamples.MARO_PROCESS_JOB_START, parents=[global_parser]) parser_job_start.add_argument('deployment_path', help='Path of the job deployment') parser_job_start.set_defaults(func=start_job) # maro process job stop from maro.cli.process.job import stop_job parser_job_stop = parser_job_subparsers.add_parser( 'stop', help='Stop a training job', examples=CliExamples.MARO_PROCESS_JOB_STOP, parents=[global_parser]) parser_job_stop.add_argument('job_name', help='Name of the job') parser_job_stop.set_defaults(func=stop_job) # maro process job delete from maro.cli.process.job import delete_job parser_job_delete = parser_job_subparsers.add_parser( 'delete', help='delete a stopped job', examples=CliExamples.MARO_PROCESS_JOB_DELETE, parents=[global_parser]) parser_job_delete.add_argument('job_name', help='Name of the job or the schedule') parser_job_delete.set_defaults(func=delete_job) # maro process job list from maro.cli.process.job import list_jobs parser_job_list = parser_job_subparsers.add_parser( 'list', help='List all jobs', examples=CliExamples.MARO_PROCESS_JOB_LIST, parents=[global_parser]) parser_job_list.set_defaults(func=list_jobs) # maro process job logs from maro.cli.process.job import get_job_logs parser_job_logs = parser_job_subparsers.add_parser( 'logs', help='Get logs of the job', examples=CliExamples.MARO_PROCESS_JOB_LOGS, parents=[global_parser]) parser_job_logs.add_argument('job_name', help='Name of the job') parser_job_logs.set_defaults(func=get_job_logs) # maro process schedule parser_schedule = subparsers.add_parser('schedule', help='Manage schedules', parents=[global_parser]) parser_schedule.set_defaults(func=_help_func(parser=parser_schedule)) parser_schedule_subparsers = parser_schedule.add_subparsers() # maro process schedule start from maro.cli.process.schedule import start_schedule parser_schedule_start = parser_schedule_subparsers.add_parser( 'start', help='Start a schedule', examples=CliExamples.MARO_PROCESS_SCHEDULE_START, parents=[global_parser]) parser_schedule_start.add_argument('deployment_path', help='Path of the schedule deployment') parser_schedule_start.set_defaults(func=start_schedule) # maro process schedule stop from maro.cli.process.schedule import stop_schedule parser_schedule_stop = parser_schedule_subparsers.add_parser( 'stop', help='Stop a schedule', examples=CliExamples.MARO_PROCESS_SCHEDULE_STOP, parents=[global_parser]) parser_schedule_stop.add_argument('schedule_name', help='Name of the schedule') parser_schedule_stop.set_defaults(func=stop_schedule) # maro process template from maro.cli.process.template import template parser_template = subparsers.add_parser( "template", help="Get deployment templates", examples=CliExamples.MARO_PROCESS_TEMPLATE, parents=[global_parser]) parser_template.add_argument("--setting_deploy", action="store_true", help="Get environment setting templates") parser_template.add_argument("export_path", default="./", nargs='?', help="Path of the export directory") parser_template.set_defaults(func=template)
def load_parser_k8s(prev_parser: ArgumentParser, global_parser: ArgumentParser) -> None: subparsers = prev_parser.add_subparsers() # maro k8s create from maro.cli.k8s.create import create parser_create = subparsers.add_parser( 'create', help='Create cluster', examples=CliExamples.MARO_K8S_CREATE, parents=[global_parser] ) parser_create.add_argument( 'deployment_path', help='Path of the create deployment') parser_create.set_defaults(func=create) # maro k8s delete from maro.cli.k8s.delete import delete parser_create = subparsers.add_parser( 'delete', help='Delete cluster', examples=CliExamples.MARO_K8S_DELETE, parents=[global_parser] ) parser_create.add_argument( 'cluster_name', help='Name of the cluster') parser_create.set_defaults(func=delete) # maro k8s node parser_node = subparsers.add_parser( 'node', help='Manage nodes of the cluster', parents=[global_parser] ) parser_node.set_defaults(func=_help_func(parser=parser_node)) parser_node_subparsers = parser_node.add_subparsers() # maro k8s node scale from maro.cli.k8s.node import scale_node parser_node_scale = parser_node_subparsers.add_parser( 'scale', help="Scale up or scale down nodes to target number", examples=CliExamples.MARO_K8S_NODE_SCALE, parents=[global_parser] ) parser_node_scale.add_argument( 'cluster_name', help='Name of the cluster') parser_node_scale.add_argument( 'node_size', help='Azure VM size') parser_node_scale.add_argument( 'replicas', type=int, help='Target number of the nodes in the specific node_size') parser_node_scale.set_defaults(func=scale_node) # maro k8s node list from maro.cli.k8s.node import list_node parser_node_scale = parser_node_subparsers.add_parser( 'list', help="List details of nodes", examples=CliExamples.MARO_K8S_NODE_LIST, parents=[global_parser] ) parser_node_scale.add_argument( 'cluster_name', help='Name of the cluster') parser_node_scale.set_defaults(func=list_node) # maro k8s image parser_image = subparsers.add_parser( 'image', help='Manage images of the cluster', parents=[global_parser] ) parser_image.set_defaults(func=_help_func(parser=parser_image)) parser_image_subparsers = parser_image.add_subparsers() # maro k8s image push from maro.cli.k8s.image import push_image parser_image_push = parser_image_subparsers.add_parser( 'push', help='Push a local image to the cluster', examples=CliExamples.MARO_K8S_IMAGE_PUSH, parents=[global_parser] ) parser_image_push.add_argument( 'cluster_name', help='Name of the cluster') parser_image_push.add_argument( '--image-name', help='Name of the local image') parser_image_push.set_defaults(func=push_image) # maro k8s image list from maro.cli.k8s.image import list_image parser_image_push = parser_image_subparsers.add_parser( 'list', help='List the images in the cluster', examples=CliExamples.MARO_K8S_IMAGE_LIST, parents=[global_parser] ) parser_image_push.add_argument( 'cluster_name', help='Name of the cluster') parser_image_push.set_defaults(func=list_image) # maro k8s data parser_data = subparsers.add_parser( 'data', help='Manage user data storage in the cluster', parents=[global_parser] ) parser_data.set_defaults(func=_help_func(parser=parser_data)) parser_data_subparsers = parser_data.add_subparsers() # maro k8s data push from maro.cli.k8s.data import push_data parser_data_push = parser_data_subparsers.add_parser( 'push', help='Push local data to the cluster data storage', examples=CliExamples.MARO_K8S_DATA_PUSH, parents=[global_parser] ) parser_data_push.add_argument( 'cluster_name', help='Name of the cluster') parser_data_push.add_argument( 'local_path', help='Path of the local file') parser_data_push.add_argument( 'remote_dir', help='Path of the directory in the cluster data storage') parser_data_push.set_defaults(func=push_data) # maro k8s data pull from maro.cli.k8s.data import pull_data parser_data_pull = parser_data_subparsers.add_parser( 'pull', help='Pull data in the cluster data storage to local', examples=CliExamples.MARO_K8S_DATA_PULL, parents=[global_parser] ) parser_data_pull.add_argument( 'cluster_name', help='Name of the cluster') parser_data_pull.add_argument( 'remote_path', help='Path of the file in the cluster data storage') parser_data_pull.add_argument( 'local_dir', help='Path of the directory in the local') parser_data_pull.set_defaults(func=pull_data) # maro k8s data remove from maro.cli.k8s.data import remove_data parser_data_pull = parser_data_subparsers.add_parser( 'remove', help='Remove data in the cluster data storage', parents=[global_parser] ) parser_data_pull.add_argument( 'cluster_name', help='Name of the cluster') parser_data_pull.add_argument( 'remote_path', help='Path of the file in the cluster data storage') parser_data_pull.set_defaults(func=remove_data) # maro k8s job parser_job = subparsers.add_parser( 'job', help='Manage jobs', parents=[global_parser] ) parser_job.set_defaults(func=_help_func(parser=parser_job)) parser_job_subparsers = parser_job.add_subparsers() # maro k8s job start from maro.cli.k8s.job import start_job parser_job_start = parser_job_subparsers.add_parser( 'start', help='Start a training job', examples=CliExamples.MARO_K8S_JOB_START, parents=[global_parser] ) parser_job_start.add_argument( 'cluster_name', help='Name of the cluster') parser_job_start.add_argument( 'deployment_path', help='Path of the job deployment') parser_job_start.set_defaults(func=start_job) # maro k8s job stop from maro.cli.k8s.job import stop_job parser_job_stop = parser_job_subparsers.add_parser( 'stop', help='Stop a training job', examples=CliExamples.MARO_K8S_JOB_STOP, parents=[global_parser] ) parser_job_stop.add_argument( 'cluster_name', help='Name of the cluster') parser_job_stop.add_argument( 'job_name', help='Name of the job') parser_job_stop.set_defaults(func=stop_job) # maro k8s job logs from maro.cli.k8s.job import get_job_logs parser_job_logs = parser_job_subparsers.add_parser( 'logs', help='List details of jobs', parents=[global_parser] ) parser_job_logs.add_argument( 'cluster_name', help='Name of the cluster') parser_job_logs.add_argument( 'job_name', help='Name of the job') parser_job_logs.set_defaults(func=get_job_logs) # maro k8s schedule parser_schedule = subparsers.add_parser( 'schedule', help='Manage schedules', parents=[global_parser] ) parser_schedule.set_defaults(func=_help_func(parser=parser_schedule)) parser_schedule_subparsers = parser_schedule.add_subparsers() # maro k8s schedule start from maro.cli.k8s.schedule import start_schedule parser_schedule_start = parser_schedule_subparsers.add_parser( 'start', help='Start a schedule', examples=CliExamples.MARO_K8S_SCHEDULE_START, parents=[global_parser] ) parser_schedule_start.add_argument( 'cluster_name', help='Name of the cluster') parser_schedule_start.add_argument( 'deployment_path', help='Path of the schedule deployment') parser_schedule_start.set_defaults(func=start_schedule) # maro k8s schedule stop from maro.cli.k8s.schedule import stop_schedule parser_schedule_stop = parser_schedule_subparsers.add_parser( 'stop', help='Stop a schedule', examples=CliExamples.MARO_K8S_SCHEDULE_STOP, parents=[global_parser] ) parser_schedule_stop.add_argument( 'cluster_name', help='Name of the cluster') parser_schedule_stop.add_argument( 'schedule_name', help='Name of the schedule') parser_schedule_stop.set_defaults(func=stop_schedule) # maro k8s status from maro.cli.k8s.status import status parser_status = subparsers.add_parser( 'status', help='Get status of the cluster', examples=CliExamples.MARO_K8S_STATUS, parents=[global_parser] ) parser_status.add_argument('cluster_name', help='Name of the cluster') parser_status.set_defaults(func=status) # maro k8s template from maro.cli.k8s.template import template parser_template = subparsers.add_parser( 'template', help='Get deployment templates', examples=CliExamples.MARO_K8S_TEMPLATE, parents=[global_parser] ) parser_template.add_argument( 'export_path', default='./', help='Path of the export directory') parser_template.set_defaults(func=template)
def main(): global_parser = ArgumentParser() global_parser.add_argument("--debug", action='store_true', help="Enable debug mode") global_parser.add_argument("-h", "--help", action='store_true', help="Show this message and exit") parser = ArgumentParser(prog='maro', description=MARO_BANNER, parents=[global_parser]) parser.set_defaults(func=_help_func(parser=parser)) parser.add_argument('--version', action='store_true', help='Get version info') subparsers = parser.add_subparsers() # maro env parser_env = subparsers.add_parser( 'env', help= 'Get all environment-related information, such as the supported scenarios, topologies. And it is also responsible to generate data to the specific environment, which has external data dependency.', parents=[global_parser]) parser_env.set_defaults(func=_help_func(parser=parser_env)) load_parser_env(parser_env, global_parser) # maro data parser_data = subparsers.add_parser( 'data', help="Data processing tools for MARO binary format.", parents=[global_parser]) parser_data.set_defaults(func=_help_func(parser=parser_data)) load_parser_data(prev_parser=parser_data, global_parser=global_parser) # maro meta parser_meta = subparsers.add_parser('meta', help="Manage the meta files for MARO.", parents=[global_parser]) parser_meta.set_defaults(func=_help_func(parser=parser_meta)) load_parser_meta(prev_parser=parser_meta, global_parser=global_parser) # maro grass parser_grass = subparsers.add_parser( 'grass', help= "Manage distributed cluster with native virtual machines (for development only).", parents=[global_parser]) parser_grass.set_defaults(func=_help_func(parser=parser_grass)) load_parser_grass(prev_parser=parser_grass, global_parser=global_parser) # maro k8s parser_k8s = subparsers.add_parser( 'k8s', help="Manage distributed cluster with Kubernetes.", parents=[global_parser]) parser_k8s.set_defaults(func=_help_func(parser=parser_k8s)) load_parser_k8s(prev_parser=parser_k8s, global_parser=global_parser) # Get args and parse global arguments args = parser.parse_args() if args.debug: GlobalParams.LOG_LEVEL = logging.DEBUG else: GlobalParams.LOG_LEVEL = logging.INFO if args.version: logger.info(f'{__version__}') return actual_args = _get_actual_args(namespace=args) # WARNING: We cannot assign any argument like 'func' in the CLI try: args.func(**actual_args) except CliException as e: if args.debug: logger.error_red(f"{e.get_message()}\n{traceback.format_exc()}") else: logger.error_red(e.get_message())
def load_parser_grass(prev_parser: ArgumentParser, global_parser: ArgumentParser) -> None: subparsers = prev_parser.add_subparsers() # maro grass create from maro.cli.grass.create import create parser_create = subparsers.add_parser( 'create', help='Create cluster', examples=CliExamples.MARO_GRASS_CREATE, parents=[global_parser] ) parser_create.add_argument( 'deployment_path', help='Path of the create deployment') parser_create.set_defaults(func=create) # maro grass delete from maro.cli.grass.delete import delete parser_delete = subparsers.add_parser( 'delete', help='Delete cluster', examples=CliExamples.MARO_GRASS_DELETE, parents=[global_parser] ) parser_delete.add_argument( 'cluster_name', help='Name of the cluster') parser_delete.set_defaults(func=delete) # maro grass node parser_node = subparsers.add_parser( 'node', help='Manage nodes of the cluster', parents=[global_parser] ) parser_node.set_defaults(func=_help_func(parser=parser_node)) parser_node_subparsers = parser_node.add_subparsers() # maro grass node scale from maro.cli.grass.node import scale_node parser_node_scale = parser_node_subparsers.add_parser( 'scale', help="Scale up or scale down nodes to target number", examples=CliExamples.MARO_GRASS_NODE_SCALE, parents=[global_parser] ) parser_node_scale.add_argument( 'cluster_name', help='Name of the cluster') parser_node_scale.add_argument( 'node_size', help='Azure VM size') parser_node_scale.add_argument( 'replicas', type=int, help='Target number of the nodes in the specific node_size') parser_node_scale.set_defaults(func=scale_node) # maro grass node start from maro.cli.grass.node import start_node parser_node_start = parser_node_subparsers.add_parser( 'start', help="Start nodes", examples=CliExamples.MARO_GRASS_NODE_START, parents=[global_parser] ) parser_node_start.add_argument( 'cluster_name', help='Name of the cluster') parser_node_start.add_argument( 'node_size', help='Azure VM size') parser_node_start.add_argument( 'replicas', type=int, help='Target number of the nodes need to be started in the specific node_size') parser_node_start.set_defaults(func=start_node) # maro grass node stop from maro.cli.grass.node import stop_node parser_node_stop = parser_node_subparsers.add_parser( 'stop', help="Stop nodes", examples=CliExamples.MARO_GRASS_NODE_STOP, parents=[global_parser] ) parser_node_stop.add_argument( 'cluster_name', help='Name of the cluster') parser_node_stop.add_argument( 'node_size', help='Azure VM size') parser_node_stop.add_argument( 'replicas', type=int, help='Target number of the nodes need to be stopped in the specific node_size') parser_node_stop.set_defaults(func=stop_node) # maro grass node list from maro.cli.grass.node import list_node parser_node_list = parser_node_subparsers.add_parser( 'list', help="List details of nodes", examples=CliExamples.MARO_GRASS_NODE_LIST, parents=[global_parser] ) parser_node_list.add_argument( 'cluster_name', help='Name of the cluster') parser_node_list.set_defaults(func=list_node) # maro grass node join from maro.cli.grass.node import node_join parser_node_join = parser_node_subparsers.add_parser( 'join', help="Let one node join in a cluster in on-premises mode.", examples=CliExamples.MARO_GRASS_NODE_JOIN, parents=[global_parser] ) parser_node_join.add_argument( 'node_join_path', help='The node join description file path.') parser_node_join.set_defaults(func=node_join) # maro grass node leave from maro.cli.grass.node import node_leave parser_node_leave = parser_node_subparsers.add_parser( "leave", help="make node leave to cluster", examples=CliExamples.MARO_GRASS_NODE_LEAVE, parents=[global_parser] ) parser_node_leave.add_argument( "cluster_name", help="name of the cluster") parser_node_leave.add_argument( "node_name", help="The name of node going to be leave cluster.") parser_node_leave.set_defaults(func=node_leave) # maro grass image parser_image = subparsers.add_parser( 'image', help='Manage images of the cluster', parents=[global_parser] ) parser_image.set_defaults(func=_help_func(parser=parser_image)) parser_image_subparsers = parser_image.add_subparsers() # maro grass image push from maro.cli.grass.image import push_image parser_image_push = parser_image_subparsers.add_parser( 'push', help='Push a local image to the cluster', examples=CliExamples.MARO_GRASS_IMAGE_PUSH, parents=[global_parser] ) parser_image_push.add_argument( 'cluster_name', help='Name of the cluster') parser_image_push.add_argument( '--image-name', help='Name of the local image') parser_image_push.add_argument( '--image-path', help='Path of the local tar file') parser_image_push.add_argument( '--remote-context-path', help='Absolute path of the image context in the user data storage of the cluster ') parser_image_push.add_argument( '--remote-image-name', help='Name of the image') parser_image_push.set_defaults(func=push_image) # maro grass data parser_data = subparsers.add_parser( 'data', help='Manage user data storage in the cluster', parents=[global_parser] ) parser_data.set_defaults(func=_help_func(parser=parser_data)) parser_data_subparsers = parser_data.add_subparsers() # maro grass data push from maro.cli.grass.data import push_data parser_data_push = parser_data_subparsers.add_parser( 'push', help='Push the local data to the remote directory', examples=CliExamples.MARO_GRASS_DATA_PUSH, parents=[global_parser] ) parser_data_push.add_argument( 'cluster_name', help='Name of the cluster') parser_data_push.add_argument( 'local_path', help='Path of the local file') parser_data_push.add_argument( 'remote_path', help='Path of the directory in the cluster data storage') parser_data_push.set_defaults(func=push_data) # maro grass data pull from maro.cli.grass.data import pull_data parser_data_pull = parser_data_subparsers.add_parser( 'pull', help='Pull the remote data to the local directory', examples=CliExamples.MARO_GRASS_DATA_PULL, parents=[global_parser] ) parser_data_pull.add_argument( 'cluster_name', help='Name of the cluster') parser_data_pull.add_argument( 'remote_path', help='Path of the file in the cluster data storage') parser_data_pull.add_argument( 'local_path', help='Path of the directory in the local') parser_data_pull.set_defaults(func=pull_data) # maro grass job parser_job = subparsers.add_parser( 'job', help='Manage jobs', parents=[global_parser] ) parser_job.set_defaults(func=_help_func(parser=parser_job)) parser_job_subparsers = parser_job.add_subparsers() # maro grass job start from maro.cli.grass.job import start_job parser_job_start = parser_job_subparsers.add_parser( 'start', help='Start a training job', examples=CliExamples.MARO_GRASS_JOB_START, parents=[global_parser] ) parser_job_start.add_argument( 'cluster_name', help='Name of the cluster') parser_job_start.add_argument( 'deployment_path', help='Path of the job deployment') parser_job_start.set_defaults(func=start_job) # maro grass job stop from maro.cli.grass.job import stop_job parser_job_stop = parser_job_subparsers.add_parser( 'stop', help='Stop a training job', examples=CliExamples.MARO_GRASS_JOB_STOP, parents=[global_parser] ) parser_job_stop.add_argument( 'cluster_name', help='Name of the cluster') parser_job_stop.add_argument( 'job_name', help='Name of the job') parser_job_stop.set_defaults(func=stop_job) # maro grass job list from maro.cli.grass.job import list_job parser_job_list = parser_job_subparsers.add_parser( 'list', help='List details of jobs', examples=CliExamples.MARO_GRASS_JOB_LIST, parents=[global_parser] ) parser_job_list.add_argument( 'cluster_name', help='Name of the cluster') parser_job_list.set_defaults(func=list_job) # maro grass job logs from maro.cli.grass.job import get_job_logs parser_job_logs = parser_job_subparsers.add_parser( 'logs', help='Get logs of the job', examples=CliExamples.MARO_GRASS_JOB_LOGS, parents=[global_parser] ) parser_job_logs.add_argument( 'cluster_name', help='Name of the cluster') parser_job_logs.add_argument( 'job_name', help='Name of the job') parser_job_logs.set_defaults(func=get_job_logs) # maro grass schedule parser_schedule = subparsers.add_parser( 'schedule', help='Manage schedules', parents=[global_parser] ) parser_schedule.set_defaults(func=_help_func(parser=parser_schedule)) parser_schedule_subparsers = parser_schedule.add_subparsers() # maro grass schedule start from maro.cli.grass.schedule import start_schedule parser_schedule_start = parser_schedule_subparsers.add_parser( 'start', help='Start a schedule', examples=CliExamples.MARO_GRASS_SCHEDULE_START, parents=[global_parser] ) parser_schedule_start.add_argument( 'cluster_name', help='Name of the cluster') parser_schedule_start.add_argument( 'deployment_path', help='Path of the schedule deployment') parser_schedule_start.set_defaults(func=start_schedule) # maro grass schedule stop from maro.cli.grass.schedule import stop_schedule parser_schedule_stop = parser_schedule_subparsers.add_parser( 'stop', help='Stop a schedule', examples=CliExamples.MARO_GRASS_SCHEDULE_STOP, parents=[global_parser] ) parser_schedule_stop.add_argument( 'cluster_name', help='Name of the cluster') parser_schedule_stop.add_argument( 'schedule_name', help='Name of the schedule') parser_schedule_stop.set_defaults(func=stop_schedule) # maro grass clean from maro.cli.grass.clean import clean parser_clean = subparsers.add_parser( 'clean', help='Clean cluster', examples=CliExamples.MARO_GRASS_CLEAN, parents=[global_parser] ) parser_clean.add_argument( 'cluster_name', help='Name of the cluster') parser_clean.set_defaults(func=clean) # maro grass status from maro.cli.grass.status import status parser_status = subparsers.add_parser( 'status', help='Get status of the cluster', examples=CliExamples.MARO_GRASS_STATUS, parents=[global_parser] ) parser_status.add_argument('cluster_name', help='Name of the cluster') parser_status.add_argument('resource_name', help='Name of the resource') parser_status.set_defaults(func=status) # maro grass template from maro.cli.grass.template import template parser_clean = subparsers.add_parser( 'template', help='Get deployment templates', examples=CliExamples.MARO_GRASS_TEMPLATES, parents=[global_parser] ) parser_clean.add_argument( 'export_path', default='./', help='Path of the export directory') parser_clean.set_defaults(func=template)