New to Kestra?
Use blueprints to kickstart your first workflows.
Fetch your public IP, compare it with the last value in the KV store, and flag changes. Schedule and webhook triggers, no secrets or Docker needed.
Home labs, VPNs and NAT gateways change their public IP without telling you, and then allow-lists and firewall rules quietly stop matching. This blueprint checks the egress IP, remembers it, and flags the moment it changes.
fetch_ip (io.kestra.plugin.core.http.Request) asks an IP service for the address your worker's traffic comes from.read_last_ip (io.kestra.plugin.core.kv.Get) loads the IP saved by the previous run.compare_ip (io.kestra.plugin.scripts.shell.Commands, Process runner) validates the response looks like an IP, then reports first_run, unchanged or changed through the ::{"outputs": ...}:: protocol.handle_result (io.kestra.plugin.core.flow.If) saves the new IP and logs a WARN when it is new or changed, otherwise logs that it held steady.Schedule every 15 minutes (shipped disabled) and a Webhook (public-ip-check) for on-demand checks.current_ip and status outputs you can reuse from a subflow.The check itself is one HTTP call. Kestra supplies the memory between runs (the KV store), the schedule, the branch on change, and an execution history that shows exactly when the address moved.
sh shell and grep on the worker, which any Linux Kestra image has.ip_service_url (URI, default https://api.ipify.org?format=json): any endpoint that returns {"ip": "..."}.kv_key (STRING, default public_ip_last): KV key where the last IP is stored.first_run and stores your IP.unchanged.public_ip_last value in the namespace KV store to a different IP and run again. It reports changed.every_15_minutes trigger when you are happy.outputs.current_ip: 203.0.113.7outputs.status: unchangedlog_change with a Slack, email or Jira task to notify your team.