Hi community, At present, the command executed by the task in the python Api is to pass the specific content through the parameter. For example, shell task: Shell(name="task_parent", command="echo hello pydolphinscheduler"). File is a good choice when the command executed by the task is very long.
Teacher Zhongjiajie guided me, we called it New mechanism file plugins to Python API. Resource plugins can be used in workflows and tasks. When both have resource plugins, the resource plugin in the task is used first. Plugins I will implement include but are not limited to local file system, GitHub, GitLab, Amazon S3, Alibaba Cloud OSS. This is a tutorial for the local resource plugin, you can find it in PR[1], it is the local resource plugin. with ProcessDefinition( name="tutorial_resource_plugin", schedule="0 0 0 * * ? *", start_time="2022-01-01", tenant="tenant_exists", resource_plugin=Local("/tmp"), ) as process_definition: file = "resource.sh" path = Path("/tmp").joinpath(file) with open(str(path), "w") as f: f.write("echo tutorial resource plugin") task_parent = Shell( name="local-resource-example", command=file, ) print(task_parent.task_params) os.remove(path) process_definition.run() Below is my draft design for the shell task. You can see the GitLab resource plugin in PR[2] to understand my design. I abstracted a Resource class and created an abstract function read_file for it. All resource plugins need to inherit from it and implement the abstract function read_file. Add property in shell ext: set = {".sh", ".zsh"} ext is used to detect that shell tasks can only accept files ending in .sh and .zsh ext_attr: str = "_raw_script" At the same time, it is added in the init function self._raw_script = command ext_attr is used to save the file path, Add a new parameter resource_plugin to the init function of the task to accept resource plug-ins, add a new method to obtain specific resource plug-ins, and also need to add attributes ext and ext_attr. Additional details can be found in pr[1] and pr[2]. I'm very sorry, it's my first time to contribute and I didn't follow the DSIP process, sorry. I already add a GitHub Issue for my proposal, which you could see in https://github.com/apache/dolphinscheduler/issues/10911 <https://github.com/apache/dolphinscheduler/issues/10911>. Looking forward any feedback for this thread. [1]: https://github.com/apache/dolphinscheduler/pull/11360 < https://github.com/apache/dolphinscheduler/pull/11360> [2]: https://github.com/apache/dolphinscheduler/pull/11831 < https://github.com/apache/dolphinscheduler/pull/11831>