flant / shell-operator

Shell-operator is a tool for running event-driven scripts in a Kubernetes cluster
https://flant.github.io/shell-operator/
Apache License 2.0
2.4k stars 213 forks source link

Add support for HTTP events a.k.a. webhooks #636

Open redbaron opened 1 month ago

redbaron commented 1 month ago

shell-operator is great tool to run small (or large) script snippets in response to events. Current event list is:

I propose to add support for HTTP request events. Hooks can declare interest in HTTP request and will be called when matched request arrives. With this change binding context will have new key with HTTP request details (url, body, headers) and hook can optionally produce HTTP response by writing JSON into special path.

Upon startup hooks declare interest in certain incoming requests with jqFilter (for instance they can match on body or URL) similar to how they now subscribe to kubernetes watches. Config should also declare whether shell-operator waits for hook to produce response or preconfigured response can be returned immediately.

There are other projects in this space, like https://github.com/adnanh/webhook, but they lack k8s integration shell-operator provides and frankly don't look as ergonomic as shell-operator.

raabdullaev commented 1 month ago

@redbaron excellent idea! Are you ready to implement it by yourself?

redbaron commented 1 month ago

Looking at webhooks implementation I can see that handler is not added to queue . I'd prefer for HTTP event sources to be queued , is t OK with you?

If queued and hook is configured to provide direct response, what would be behaviour on timeout? remove hook from queue? what if it is already running?