66 lines
1.8 KiB
Nix
66 lines
1.8 KiB
Nix
{ pkgs, ... }:
|
|
let
|
|
forwardedPort = 19000;
|
|
internalPort = 9000;
|
|
in
|
|
{
|
|
name = "webhook";
|
|
|
|
nodes = {
|
|
webhookMachine = { pkgs, ... }: {
|
|
virtualisation.forwardPorts = [{
|
|
host.port = forwardedPort;
|
|
guest.port = internalPort;
|
|
}];
|
|
services.webhook = {
|
|
enable = true;
|
|
port = internalPort;
|
|
openFirewall = true;
|
|
hooks = {
|
|
echo = {
|
|
execute-command = "echo";
|
|
response-message = "Webhook is reachable!";
|
|
};
|
|
};
|
|
hooksTemplated = {
|
|
echoTemplate = ''
|
|
{
|
|
"id": "echo-template",
|
|
"execute-command": "echo",
|
|
"response-message": "{{ getenv "WEBHOOK_MESSAGE" }}"
|
|
}
|
|
'';
|
|
};
|
|
environment.WEBHOOK_MESSAGE = "Templates are working!";
|
|
};
|
|
};
|
|
};
|
|
|
|
extraPythonPackages = p: [
|
|
p.requests
|
|
p.types-requests
|
|
];
|
|
|
|
testScript = { nodes, ... }: ''
|
|
import requests
|
|
webhookMachine.wait_for_unit("webhook")
|
|
webhookMachine.wait_for_open_port(${toString internalPort})
|
|
|
|
with subtest("Check that webhooks can be called externally"):
|
|
response = requests.get("http://localhost:${toString forwardedPort}/hooks/echo")
|
|
print(f"Response code: {response.status_code}")
|
|
print("Response: %r" % response.content)
|
|
|
|
assert response.status_code == 200
|
|
assert response.content == b"Webhook is reachable!"
|
|
|
|
with subtest("Check that templated webhooks can be called externally"):
|
|
response = requests.get("http://localhost:${toString forwardedPort}/hooks/echo-template")
|
|
print(f"Response code: {response.status_code}")
|
|
print("Response: %r" % response.content)
|
|
|
|
assert response.status_code == 200
|
|
assert response.content == b"Templates are working!"
|
|
'';
|
|
}
|