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:

  1. 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' ```
  2. Regenerate code by running shell script skipper make generate-all
  3. 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
  4. 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))
  5. Implement the Operator interface
  6. Plug the new Operator implementation in the OperatorManager constructor: go func NewManager(log logrus.FieldLogger) Manager { return NewManagerWithOperators(log, lso.NewLSOperator(), ocs.NewOcsOperator(log), cnv.NewCnvOperator(log)) }
  7. Implement tests verifying new OLM operator installation and validation, i.e. in internal/bminventory/inventory_test.go
  8. Make sure all the tests are green