Skip to main content
Version: main

Lifecycle

This section describes the different hooks that can be implemented by an operator and what their use case is.

Priority

Operators are initialized (PreStart and Start) according to their priority and they are closed (Stop, PreStop and Close) in the reverse order.

Lifecycle

Under the hood, Inspektor Gadget uses two separate functions that control these lifecycles. One is to get information from a gadget ("GetGadgetInfo"), one is to actually run a gadget ("RunGadget").

While the latter runs all lifecycle steps in the order documented below, the former will only call Instantiate and Close. That means that everything you do in Instantiate should use the least possible resources, but also that everything a gadget "offers" should be known after that step. That means: all DataSources should be known and finalized (fields added/modified, annotations added, etc.) after this step.

Actual work should only be done on the forthcoming hooks (PreStart/Start). If the initialization step needs to actually create some kind of state that is necessary for later steps in the RunGadget case, the Close hook can be used to tear everything back down.

Instantiate

Instances (DataOperatorInstance and ImageOperatorInstance) are created by InstantiateDataOperator() and InstantiateImageOperator() respectively. Those functions should return a new initalized instance of the operator. They can also return nil if the operator should be skipped. Data sources should be created in this step.

PreStart (optional)

The PreStart() method is called before the gadget is started. The operator can subscribe to existing data sources here.

Start

This method indicates the operator should start emitting data.

Stop

The operator shouldn't emit any other data after stop has been called.

PostStop (optional)

The PostStop() method is used to perform last minute operations after the operator has been stopped.

Close

The Close() method is called to shutdown the operator. It must release all resources and stop all operations started by the methods above.

ExtraParams (optional)

The ExtraParams() method is used to expose parameters to control the operator.