Conditional Execution
You can conditionally execute a step using the if
argument:
pipeline "notify_unencrypted" {step "query" "unencrypted_vols" {database = "postgres://steampipe@localhost:9193/steampipe"sql = "select arn from aws_ebs_volume where not encrypted"}step "http" "notify_slack" {if = length(step.query.unencrypted_vols.rows) > 0url = "https://hooks.slack.com/services/T04THIS54LQ/B04ISH1B2GM/vIakTJfqFAKET7M14g5H32w8"method = "post"request_body = jsonencode({text = "Unencrypted Volumes: ${join(", ", step.query.unencrypted_vols.rows[*].arn)}"})}}
Flowpipe does not provide else
or case
arguments to step
, but you can mimic the behavior by using different conditions in multiple steps:
pipeline "notify_unencrypted" {step "query" "unencrypted_vols" {database = "postgres://steampipe@localhost:9193/steampipe"sql = "select arn from aws_ebs_volume where not encrypted"}step "http" "notify_slack" {if = length(step.query.unencrypted_vols.rows) > 0url = "https://hooks.slack.com/services/T04THIS54LQ/B04ISH1B2GM/vIakTJfqFAKET7M14g5H32w8"method = "post"request_body = jsonencode({text = "There are ${length(step.query.unencrypted_vols.rows)} unencrypted volumes!"})}step "http" "notify_slack_all_encrypted" {if = length(step.query.unencrypted_vols.rows) == 0url = "https://hooks.slack.com/services/T04THIS54LQ/B04ISH1B2GM/vIakTJfqFAKET7M14g5H32w8"method = "post"request_body = jsonencode({text = "All Volumes are encrypted!"})}}
In this instance, you could accomplish the same thing using conditional expressions:
pipeline "notify_unencrypted" {step "query" "unencrypted_vols" {database = "postgres://steampipe@localhost:9193/steampipe"sql = "select arn from aws_ebs_volume where not encrypted"}step "http" "notify_slack" {url = "https://hooks.slack.com/services/T04THIS54LQ/B04ISH1B2GM/vIakTJfqFAKET7M14g5H32w8"method = "post"request_body = (length(step.query.unencrypted_vols.rows) > 0? jsonencode({ text = "There are ${length(step.query.unencrypted_vols.rows)} unencrypted volumes!" }): jsonencode({ text = "All Volumes are encrypted!" }))}}
or string directives:
pipeline "notify_unencrypted" {step "query" "unencrypted_vols" {database = "postgres://steampipe@localhost:9193/steampipe"sql = "select arn from aws_ebs_volume where not encrypted"}step "http" "notify_slack" {url = "https://hooks.slack.com/services/T04THIS54LQ/B04ISH1B2GM/vIakTJfqFAKET7M14g5H32w8"method = "post"request_body = jsonencode({ text = "%{if length(step.query.unencrypted_vols.rows) > 0}There are ${length(step.query.unencrypted_vols.rows)} unencrypted volumes! %{else} All Volumes are encrypted! %{endif}" })}}