The initial framework comes with a predefined set of actuators and the A* Planner. In some cases, administrators might want to use another set of actuators which can enable various orchestration activities. Similarly, different planning algorithm or multiple planners for several groups of workloads can be supported. Therefore, the overall framework supports a concept of plugins.
The current framework supports hot-pluggable actuators. The Intent Controller implements a component responsible for the overall plugin management. The plugin manager exposes an endpoint that can be used by the available plugins.
As shown in the following diagram, new plugins have to register against this endpoint to be used in the actual planning cycle:
After successful registration, the planner will call the functions NextState, Perform and Effect via gRPC. The bi-directional streaming is implemented on NextState which has demonstrated an improvement on the planner's performance.
The plugins_helper provides a function that can be used to connect an actuator with the rest of the framework. To do so, the user will need to provide the GRPC endpoint and port for the actuator as well as for the plugin manager:
actuator := <...>
plugins.StartActuatorPlugin(actuator, "localhost", 12345, "localhost", "33333")