Pipeline stages can also be executed conditionally depending on a trigger. There is a syntax that needs to be followed for this to work as expected.
Syntax
The syntax for the expression will be of expr language. This is a simple language that can be thought of as a mix between Python and Golang.
Triggers
Triggers can be passed on a per stage basis in the following way:
envs:
- SOME_KEY: false
stages:
- id: auth
use: authorization
trigger:
expression: "envs.SOME_KEY == true"
In the above example the SOME_KEY
value from envs is used to determine whether or not the stage should be executed.
Trigger Expression Context
The trigger expression can access a lot of things related to the pipeline including the request body, the environments values, the inputs etc. Following are the things that are passed in the root of the context for expression resolution:
envs
: Environments of the pipeline. This includes bothglobal_envs
as well asenvs
. This is directly fetched fromcontext.envs
context
: The context passed to every stage. Can be useful to access data for a previous stage.inputs
: Inputs for the current stage, if any are passed.
Out of the above, the envs
object contains the details about the request.
Envs
The envs
field maps to an object and this object contains various fields:
body
: Request bodyurlValues
: Query Params for the URLpath
: Path of the URLmethod
: Method of the current requestorigin
: Origin of the requestipv4
: IPv4 of the requestipv6
: IPv6 of the requestcategory
: Category of the path.acl
: ACL of the path, if any is provided during definition of the pipeline
Using all the above values, stages can be executed conditionally in various ways.
Things to note
ReactiveSearch Pipelines support dependencies for stages. Say there are two stages defined in the following way:
stages:
- id: stage 1
use: authorization
trigger:
expression: "2 != 2"
- id: stage 2
use: elasticsearchQuery
needs:
- stage 1
In the above example, the stage 2
stage requires the stage 1
in order to execute. However, in the above case, the stage 1
will be marked as skipped
because it's trigger will resolve to false
.
When this happens, the stage 2
stage will also be marked as skipped
during execution.
The following line sums up the above behavior in a sentence and should be kept in mind during writing pipelines since it can lead to weird behavior.
If one or more dependent stages of a stage is skipped
due to trigger resolution, that stage will be skipped as well