OLM operator plugins development
Existing plugins
How to implement a new OLM operator plugin
To implement support for a new OLM operator plugin you need to make following changes:
- Introduce new validation IDs for the new operator in the swagger specification:
- for host validation:
```yaml
host-validation-id:
type: string
enum:
- 'connected' ...
- 'lso-requirements-satisfied'
- 'ocs-requirements-satisfied'
- 'cnv-requirements-satisfied' ```
- for cluster validation:
```yaml cluster-validation-id: type: string enum:- 'machine-cidr-defined' ...
- 'lso-requirements-satisfied'
- 'ocs-requirements-satisfied'
- 'cnv-requirements-satisfied' ```
- for host validation:
```yaml
host-validation-id:
type: string
enum:
- Regenerate code by running
shell script skipper make generate-all - Add the new validation IDs to proper category - "operators":
- for cluster validation:
go func (v validationID) category() (string, error) { ... case IsCnvRequirementsSatisfied, IsOcsRequirementsSatisfied, IsLsoRequirementsSatisfied: return "operators", nil - for host validaton:
go func (v validationID) category() (string, error) { ... case AreLsoRequirementsSatisfied, AreOcsRequirementsSatisfied, AreCnvRequirementsSatisfied: return "operators", nil
- for cluster validation:
- Modify the installation state machine by adding the new validationIDs to the list of required checks:
- for cluster:
go var requiredForInstall = stateswitch.And(..., ..., If(IsOcsRequirementsSatisfied), If(IsLsoRequirementsSatisfied), If(IsCnvRequirementsSatisfied)) - for host:
go var isSufficientForInstall = stateswitch.And(..., ..., If(AreOcsRequirementsSatisfied), If(AreLsoRequirementsSatisfied), If(AreCnvRequirementsSatisfied))
- for cluster:
- Implement the
Operatorinterface - Plug the new
Operatorimplementation in the OperatorManager constructor:go func NewManager(log logrus.FieldLogger) Manager { return NewManagerWithOperators(log, lso.NewLSOperator(), ocs.NewOcsOperator(log), cnv.NewCnvOperator(log)) } - Implement tests verifying new OLM operator installation and validation, i.e. in internal/bminventory/inventory_test.go
- Make sure all the tests are green