Server plugins

Corteza implements the support for Go plugins which can be used to modify default behaviour of the server and provide new functionalities like workflow functions and types.

Basic plugin structure

package main

type (
	examplePlugin struct {} (1)
)

func CortezaPlugin() interface{} { (2)
	return &examplePlugin{}
}
1 Plugin struct. Beside the functions required by the interface (Setup, Initialize, …​) you are free to add your own fields and functions.
2 Be sure you return an interface{}, otherwise Corteza can not cast it to plugin.

Supported hooks

Setup

In order to hook into the server setup procedure, your plugin should implement the plugin.Setup interface. The Setup() function will be called after internal setup procedure.

package plugin

import (
    "go.uber.org/zap"
)

type (
    Setup interface {
        Setup(log *zap.Logger) error
    }
)

Initialization

In order to hook into the server initialization procedure, your plugin should implement the plugin.Initialize interface. The Initialize() function will be called after initialization procedure with all services are initialized.

package plugin

import (
    "go.uber.org/zap"
)

type (
	Initialize interface {
		Initialize(ctx context.Context, log *zap.Logger) error
	}
)

Automation function provider

In order to register additional automation (workflow) functions, your plugin should implement the plugin.AutomationFunctionsProvider interface. The AutomationFunctions() function is called after initialization and should return slice of automation functions to be registered.

You can override existing functions by using same function reference.

package plugin

import (
	"github.com/cortezaproject/corteza-server/automation/types"
)

type (
	AutomationFunctionsProvider interface {
		AutomationFunctions() []*types.Function
	}
)