Ressourcen
uptimeify_im_alert_source
Ressource uptimeify_im_alert_source: Beispiel, alle Attribute, Import.
Die Beschreibungen auf dieser Seite kommen direkt aus dem Provider-Schema und sind deshalb englisch.
An Incident Management alert source (inbound integration). Incident Management must be active for the organization. Import with the numeric id; the server-minted tokens are shown by the API only once and are therefore null after an import until rotated.
Beispiel
variable "grafana_hmac_secret" {
type = string
sensitive = true
}
# Grafana webhook with the preset mapping, HMAC signature and a weekly quiet window.
resource "uptimeify_im_alert_source" "grafana" {
team_id = 7
name = "Grafana production"
type = "grafana"
# Write-only: never stored in state. Bump the version to send a new secret.
hmac_secret_wo = var.grafana_hmac_secret
hmac_secret_wo_version = 1
maintenance_windows = [{ days_of_week = [7], from = "02:00", to = "04:00", timezone = "Europe/Berlin" }]
}
# Custom webhook with a v2 attribute mapping and bearer auth.
resource "uptimeify_im_alert_source" "custom" {
team_id = 7
name = "Billing jobs"
type = "custom"
bearer_enabled = true
# Change to rotate the bearer token or the ingest token.
bearer_token_rotation = "2026-10"
ingest_token_rotation = "2026-10"
payload_mapping = {
default_severity = "sev3"
attributes = [
{ key = "title", standard = true, steps = [{ kind = "extract", type = "path", expr = "job.name" }] },
{ key = "severity", standard = true, steps = [
{ kind = "extract", type = "path", expr = "level" },
{ kind = "valueMap", entries = [{ from = "fatal", to = "sev1" }, { from = "error", to = "sev2" }], fallback = "sev3" },
] },
]
}
}
output "billing_webhook_url" {
value = uptimeify_im_alert_source.custom.ingest_url
sensitive = true
}Schema
Pflichtfelder
name(String) 1 to 200 characters, no surrounding whitespace.team_id(Number) Team that owns incidents from this source.type(String) A preset name fromGET /api/im/sources/presets(e.g.zabbix,datadog,grafana,alertmanager,sentry,beszel,custom),api(no webhook URL, fed byPOST /api/im/events) oremail. Changing it replaces the source.
Optional
NOTE: Write-only arguments are supported in Terraform 1.11 and later.
auto_resolve(Boolean) Resolve the incident when the vendor sends a resolve. Defaulttrue.bearer_enabled(Boolean) RequireAuthorization: Bearer <bearer_token>. Enabling it the first time mints the token.bearer_token_rotation(String) Any value; changing it mints a new bearer token (the old one stops working at once) and enables bearer auth.grouping_window_minutes(Number) Group alerts arriving within this many minutes into one incident. Unset = group by dedup key only.hmac_enabled(Boolean) Require an HMAC signature. Enabling needs a secret: sethmac_secret_wo(once is enough, disabling keeps the secret stored).hmac_secret_wo(String, Sensitive, Write-only) Write-only HMAC secret, at least 16 characters. Sent with create and wheneverhmac_secret_wo_versionchanges; it also enables HMAC. A new secret replaces the old one at once (no grace period).hmac_secret_wo_version(Number) Change to resendhmac_secret_wo.ingest_token_rotation(String) Any value; changing it rotates the ingest token. The old token keeps working untilsecondary_expires_at.maintenance_windows(Attributes List) Recurring windows in which alerts are stored as suppressed instead of opening incidents. At most 20. (siehe verschachteltes Schema)payload_mapping(Attributes) How a vendor payload becomes an alert. Either the v2attributeslist or the v1 selector fields (title,severity,status, ...). Unset = not managed: the server keeps its mapping (a preset type starts with the preset mapping; read it with the data source); removing the block later keeps the last mapping. An import reads the stored mapping. Must stay unset fortype = "email"(the server builds that mapping). (siehe verschachteltes Schema)url_token_enabled(Boolean)authMode.urlToken. The server stores the flag; unset = not sent.
Nur lesbar
bearer_token(String, Sensitive) Bearer token, minted by the server when bearer auth is first enabled or rotated. The API shows it only in that answer: null after an import untilbearer_token_rotationchanges.created_at(String)id(String) Numeric source id.inbound_email_address(String, Sensitive)type = "email": address to forward vendor alert emails to (contains the ingest token).ingest_token(String, Sensitive) Ingest token of the webhook URL (null fortype = "api"). The API shows it only on create and rotation: null after an import untilingest_token_rotationchanges.ingest_url(String, Sensitive) Webhook URL<endpoint>/api/im/ingest/<ingest_token>for preset sources.organization_id(Number)secondary_expires_at(String) End of the grace period of the previous ingest token after a rotation.updated_at(String)
Verschachteltes Schema für maintenance_windows
Required:
from(String)HH:MM, 24 h.to(String)HH:MM, 24 h.
Optional:
days_of_week(List of Number) ISO weekdays, 1 = Monday to 7 = Sunday. Unset = every day.timezone(String) IANA zone. Unset = the organization zone.
Verschachteltes Schema für payload_mapping
Optional:
attributes(Attributes List) v2 attribute-list mapping: ordered attributes, each with a step chain. (siehe verschachteltes Schema)custom(Map of String) v1: extra field -> selector.dedup_key(String) v1: selector of the dedup key.default_severity(String) Severity when the mapping yields none. The server treats unset assev3.email_selectors(Map of String) email sources: field -> email selector. The server builds it on create; read here.host(String) v1: selector of the host.resolve_values(List of String) v1: status values that resolve the alert.severity(String) v1: selector of the vendor severity.severity_map(Map of String) v1: vendor value ->sev1..sev4.status(String) v1: selector of the vendor status.title(String) v1: selector of the alert title.url(String) v1: selector of the URL.
Verschachteltes Schema für payload_mapping.attributes
Required:
key(String)
Optional:
flags(Attributes) (siehe verschachteltes Schema)standard(Boolean) A standard alert field (title, severity, status, ...).steps(Attributes List) (siehe verschachteltes Schema)
Verschachteltes Schema für payload_mapping.attributes.flags
Optional:
expand(Boolean)grouped(Boolean)hidden(Boolean)image(Boolean)
Verschachteltes Schema für payload_mapping.attributes.steps
Required:
kind(String)extractorvalueMap.
Optional:
entries(Attributes List) valueMap: from -> to pairs. (siehe verschachteltes Schema)expr(String) extract: the expression.fallback(String) valueMap: value when no entry matches.type(String) extract:path,jsonpathorconstant.
Verschachteltes Schema für payload_mapping.attributes.steps.entries
Required:
from(String)to(String)
Import
Import geht so:
Mit tofu import bzw. terraform import, zum Beispiel:
# Numeric id. ingest_token, ingest_url and bearer_token stay null until rotated.
terraform import uptimeify_im_alert_source.grafana 42