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) > 0 url = "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) > 0 url = "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) == 0 url = "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}" }) }}