Documentation ¶
Overview ¶
Package plugins implements plugin management for the policy engine.
Index ¶
- func GetCompilerOnContext(context *storage.Context) *ast.Compiler
- func Info(term *ast.Term) func(*Manager)
- func InitBundles(b map[string]*bundle.Bundle) func(*Manager)
- func InitFiles(f loader.Result) func(*Manager)
- func MaxErrors(n int) func(*Manager)
- func SetCompilerOnContext(context *storage.Context, compiler *ast.Compiler)
- type Factory
- type Manager
- func (m *Manager) Client(name string) rest.Client
- func (m *Manager) GetCompiler() *ast.Compiler
- func (m *Manager) Init(ctx context.Context) error
- func (m *Manager) Labels() map[string]string
- func (m *Manager) Plugin(name string) Plugin
- func (m *Manager) PluginStatus() map[string]*Status
- func (m *Manager) Plugins() []string
- func (m *Manager) Reconfigure(config *config.Config) error
- func (m *Manager) Register(name string, plugin Plugin)
- func (m *Manager) RegisterCompilerTrigger(f func(txn storage.Transaction))
- func (m *Manager) RegisterPluginStatusListener(name string, listener StatusListener)
- func (m *Manager) Services() []string
- func (m *Manager) Start(ctx context.Context) error
- func (m *Manager) Stop(ctx context.Context)
- func (m *Manager) UnregisterPluginStatusListener(name string)
- func (m *Manager) UpdatePluginStatus(pluginName string, status *Status)
- type Plugin
- type State
- type Status
- type StatusListener
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func GetCompilerOnContext ¶ added in v0.12.2
GetCompilerOnContext gets the compiler cached on the storage context.
func Info ¶ added in v0.10.2
Info sets the runtime information on the manager. The runtime information is propagated to opa.runtime() built-in function calls.
func InitBundles ¶ added in v0.20.0
InitBundles provides the initial set of bundles to load.
func InitFiles ¶ added in v0.20.0
InitFiles provides the initial set of other data/policy files to load.
func SetCompilerOnContext ¶ added in v0.12.2
SetCompilerOnContext puts the compiler into the storage context. Calling this function before committing updated policies to storage allows the manager to skip parsing and compiling of modules. Instead, the manager will use the compiler that was stored on the context.
Types ¶
type Factory ¶ added in v0.10.3
type Factory interface { Validate(manager *Manager, config []byte) (interface{}, error) New(manager *Manager, config interface{}) Plugin }
Factory defines the interface OPA uses to instantiate your plugin.
When OPA processes it's configuration it looks for factories that have been registered by calling runtime.RegisterPlugin. Factories are registered to a name which is used to key into the configuration blob. If your plugin has not been configured, your factory will not be invoked.
plugins: my_plugin1: some_key: foo # my_plugin2: # some_key2: bar
If OPA was started with the configuration above and received two calls to runtime.RegisterPlugins (one with NAME "my_plugin1" and one with NAME "my_plugin2"), it would only invoke the factory for for my_plugin1.
OPA instantiates and reconfigures plugins in two steps. First, OPA will call Validate to check the configuration. Assuming the configuration is valid, your factory should return a configuration value that can be used to construct your plugin. Second, OPA will call New to instantiate your plugin providing the configuration value returned from the Validate call.
Validate receives a slice of bytes representing plugin configuration and returns a configuration value that can be used to instantiate your plugin. The manager is provided to give access to the OPA's compiler, storage layer, and global configuration. Your Validate function will typically:
- Deserialize the raw config bytes
- Validate the deserialized config for semantic errors
- Inject default values
- Return a deserialized/parsed config
New receives a valid configuration for your plugin and returns a plugin object. Your New function will typically:
- Cast the config value to it's own type
- Instantiate a plugin object
- Return the plugin object
- Update status via `plugins.Manager#UpdatePluginStatus`
After a plugin has been created subsequent status updates can be send anytime the plugin enters a ready or error state.
type Manager ¶
type Manager struct { Store storage.Store Config *config.Config Info *ast.Term ID string // contains filtered or unexported fields }
Manager implements lifecycle management of plugins and gives plugins access to engine-wide components like storage.
func (*Manager) GetCompiler ¶ added in v0.8.1
GetCompiler returns the manager's compiler.
func (*Manager) Init ¶ added in v0.20.0
Init returns an error if the manager could not initialize itself. Init() should be called before Start(). Init() is idempotent.
func (*Manager) Plugin ¶ added in v0.10.2
Plugin returns the plugin registered with name or nil if name is not found.
func (*Manager) PluginStatus ¶ added in v0.17.0
PluginStatus returns the current statuses of any plugins registered.
func (*Manager) Plugins ¶ added in v0.10.2
Plugins returns the list of plugins registered with the manager.
func (*Manager) Reconfigure ¶ added in v0.10.2
Reconfigure updates the configuration on the manager.
func (*Manager) Register ¶
Register adds a plugin to the manager. When the manager is started, all of the plugins will be started.
func (*Manager) RegisterCompilerTrigger ¶ added in v0.8.1
func (m *Manager) RegisterCompilerTrigger(f func(txn storage.Transaction))
RegisterCompilerTrigger registers for change notifications when the compiler is changed.
func (*Manager) RegisterPluginStatusListener ¶ added in v0.17.0
func (m *Manager) RegisterPluginStatusListener(name string, listener StatusListener)
RegisterPluginStatusListener registers a StatusListener to be called when plugin status updates occur.
func (*Manager) Stop ¶ added in v0.9.2
Stop stops the manager, stopping all the plugins registered with it
func (*Manager) UnregisterPluginStatusListener ¶ added in v0.17.0
UnregisterPluginStatusListener removes a StatusListener registered with the same name.
func (*Manager) UpdatePluginStatus ¶ added in v0.17.0
UpdatePluginStatus updates a named plugins status. Any registered listeners will be called with a copy of the new state of all plugins.
type Plugin ¶
type Plugin interface { Start(ctx context.Context) error Stop(ctx context.Context) Reconfigure(ctx context.Context, config interface{}) }
Plugin defines the interface OPA uses to manage your plugin.
When OPA starts it will start all of the plugins it was configured to instantiate. Each time a new plugin is configured (via discovery), OPA will start it. You can use the Start call to spawn additional goroutines or perform initialization tasks.
Currently OPA will not call Stop on plugins.
When OPA receives new configuration for your plugin via discovery it will first Validate the configuration using your factory and then call Reconfigure.
type State ¶ added in v0.17.0
type State string
State defines the state that a Plugin instance is currently in with pre-defined states.
const ( // StateNotReady indicates that the Plugin is not in an error state, but isn't // ready for normal operation yet. This should only happen at // initialization time. StateNotReady State = "NOT_READY" // StateOK signifies that the Plugin is operating normally. StateOK State = "OK" // StateErr indicates that the Plugin is in an error state and should not // be considered as functional. StateErr State = "ERROR" )
type Status ¶ added in v0.17.0
type Status struct {
State State `json:"state"`
}
Status has a Plugin's current status plus an optional Message.
type StatusListener ¶ added in v0.17.0
StatusListener defines a handler to register for status updates.
Directories ¶
Path | Synopsis |
---|---|
Package bundle implements bundle downloading.
|
Package bundle implements bundle downloading. |
Package discovery implements configuration discovery.
|
Package discovery implements configuration discovery. |
Package logs implements decision log buffering and uploading.
|
Package logs implements decision log buffering and uploading. |
Package rest implements a REST client for communicating with remote services.
|
Package rest implements a REST client for communicating with remote services. |
Package status implements status reporting.
|
Package status implements status reporting. |