A plugin is a container that executes a command given a specific set of environment variables, commandline arguments, and/or data inputs defined by a plugin inputs struct. Plugins are stored on a remote container repository like AWS' Elastic Container Repository (ECR). To get a plugin in cloud-compute-api it must pass automated security reviews, a manual review, be uploaded into the appropriate container repository, and be registered with cloud-compute-api. Once it is there the plugin images are accessible via appropriate credentials. 

 A plugin can be given a set of instructions unique to that plugin to accomplish a goal. An example may be something like the cc-ras-runner plugin can be given a set of inputs to run an HEC-RAS unsteady compute. To span the other end of the spectrum by providing a much simpler unit of work example, a cc-file-manager plugin can be given a set of inputs to delete a datasource in a datastore. 


A plugin container is combined with a compute environment to create a job, additional information can be provided to give context to the plugin container through a manifest/payload to define what the plugin will do in the environment to complete the job.



A series of jobs make up a directed acyclic graph. 

Plugins can perform a series of Actions as defined by the manifest/payload. An action can consist of a smaller unit of work such as updating an input file based on instructions provided in the manifest/payload, then computing based on that updated input file. Actions are computed in the order they are specified in a manifest/payload.