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])}"
})
}
}