Plugins and Command Templates¶
New in 1.2.0
Objectives
- Present the Plugins and Library system added in version 1.2.0
 
About the Library¶
The Library is a concept inside csm-orc that allow developers to make common CommandTemplate 
available to users without needing to copy-paste an external file.
For a user only writing .json orchestrator file it will simply allow him to gain some time in writing 
by using ready-made CommandTemplate, for a library developer it is a way to package new CommandTemplate 
for csm-orc in his own work.
The content of the Library is easily displayable with the command csm-orc list-templates 
that will list every existing template in the Library and display their origin.
What is a Plugin ?¶
A Plugin is a precisely defined python library. By following a given format it is automatically 
picked up by the Library and made available to the users.
How to create a Plugin ?¶
A Plugin needs the following structure
A plugin structure
cosmotech/
└── orchestrator_plugins/
    └── my_plugin
        ├── __init__.py
        └── templates
            └── ...
from cosmotech.orchestrator.templates.plugin import Plugin
plugin = Plugin(__file__)
__all__ = [plugin]
And in the templates folder you can put any .json file containing either one single CommandTemplate 
or an orchestration file containing valid CommandTemplate
{
  "id": "Example",
  "command": "echo"
}
{
  "commandTemplates": [
    {
      "id": "Example1",
      "command": "echo"
    },
    {
      "id": "Example2",
      "command": "ls"
    }
  ]
}
And that is all you need to create a Plugin.
How to make a plugin available ?¶
The Library make use of the Implicit Namespace Packages of python as defined by the PEP-420.
To summarize, we can define Namespaces that will be able to be filled across multiple Packages 
and here we define the namespace cosmotech.orchestrator_plugins to contain all future Plugins.
We can easily add our Plugin by making the cosmotech/ folder part of the PYTHONPATH.
To do so we can :
- Define a standalone python package for our Plugin and users just need to install said package in their python environment to get access to the Plugin.
- Add the cosmotech folder inside the installation of our python package so that when users install the package from any source the Plugin gets installed alongside it
- Copy the cosmotech folder in the working directory