Inputs and Outputs
A pipeline may define input parameters:
pipeline "my_job" { param "url" { type = "string" default = "https://example.com/my/webhook" }
step "http" "my_step" { url = param.url }}
A parameter may be optional:
param "unfurl_links" { type = bool description = "Pass true to enable unfurling of primarily text-based content." optional = true }
Mods can also define variables, and they are often used to set param
defaults:
variable "default_webhook" { default = "https://example.com/my/webhook"}
pipeline "my_job" { param "url" { type = "string" default = var.default_webhook }
step "http" "first_step" { url = param.url }}
If a param is not optional and has no default, you MUST pass it a value to run the pipeline:
flowpipe run pipeline.my_job --arg "url=https://example.com/mypath"
From a trigger or step, you can pass a value for that param using args
:
trigger "schedule" "my_hourly_trigger" { schedule = "hourly" pipeline = pipeline.my_job
args = { url = "https://example.com/mypath" }}
A pipeline may also define output values. The output values are printed to stdout when you run a pipeline:
pipeline "get_astronauts" { step "http" "whos_in_space" { url = "http://api.open-notify.org/astros" method = "get" }
output "people_in_space" { value = step.http.whos_in_space.response_body.people }}
Pipeline outputs also allow you to return a value to the calling pipeline when using nested pipelines:
pipeline "get_astronauts" { step "http" "whos_in_space" { url = "http://api.open-notify.org/astros" method = "get" }
output "people" { value = step.http.whos_in_space.response_body.people }}
pipeline "my_notification_pipeline" {
step "pipeline" "get_astronauts" { pipeline = pipeline.get_astronauts }
step "http" "notify_slack" { url = "https://hooks.slack.com/services/T04THIS54LQ/B04ISH1B2GM/vIakTJfqFAKET7M14g5H32w8" method = "post" request_body = jsonencode({ text = "people in space: ${join(", ", [for u in step.pipeline.get_astronauts.output.people : u.name])}" }) }}