Use ternary operators with triggers
The ternary operator, also known as the conditional operator, is a shorthand notation for expressing conditional statements in various programming languages. It takes three operands and allows you to evaluate a condition and choose one of two expressions to execute based on the result of the condition.
The syntax of the ternary operator is generally as follows:
condition?expression1:expression2
Here's how it works:
- The "condition" is an expression that evaluates to either true or false.
- If the condition is true, the expression before the colon (" : ") is executed and becomes the value of the entire expression.
- If the condition is false, the expression after the colon is executed and becomes the value of the entire expression.
Example: Use a ternary operator to populate a tag based on how a pipeline started
For this example, assume you need to create a trigger for a CD pipeline that automatically takes the tag value from <+trigger.payload.tag>
if pipeline is executed from a webhook trigger, or else it takes the tag from from <+pipeline.variables.tag>
if the pipeline is executed manually.
Because you can ternary operators with Harness expressions, you can create a condition like:
<+condition?IF_TRUE:IF_FALSE>
For the true condition, <+pipeline.triggerType>
should be WEHOOK_CUSTOM
, and for the false condition you can use a runtime input (<+input>
) or a pipeline variable.
The resulting ternary operator condition could be something like:
<+<+pipeline.triggerType>=="MANUAL"?<+pipeline.variables.tag>:<+trigger.payload.tag>>
Example: Get a default value from the trigger payload
Suppose you have a trigger that provides runtime input for a pipeline from the trigger payload.
You could configure the trigger as follows, if the value is always available from the payload:
myVariable: <+trigger.payload.myVariable>
However, if you want to provide a default value for myVariable
when the value is missing from the trigger payload, you can use a ternary operator with Harness expressions, such as:
<+<+trigger.payload>.contains("myVariable")?<+trigger.payload.myVariable>:"DEFAULT_VALUE">
This ensures that myVariable
takes a default value of "DEFAULT_VALUE"
if the variable is not present in the payload.