at 23.11-pre 1.8 kB view raw
1{ pkgs, ... }: 2let 3 forwardedPort = 19000; 4 internalPort = 9000; 5in 6{ 7 name = "webhook"; 8 9 nodes = { 10 webhookMachine = { pkgs, ... }: { 11 virtualisation.forwardPorts = [{ 12 host.port = forwardedPort; 13 guest.port = internalPort; 14 }]; 15 services.webhook = { 16 enable = true; 17 port = internalPort; 18 openFirewall = true; 19 hooks = { 20 echo = { 21 execute-command = "echo"; 22 response-message = "Webhook is reachable!"; 23 }; 24 }; 25 hooksTemplated = { 26 echoTemplate = '' 27 { 28 "id": "echo-template", 29 "execute-command": "echo", 30 "response-message": "{{ getenv "WEBHOOK_MESSAGE" }}" 31 } 32 ''; 33 }; 34 environment.WEBHOOK_MESSAGE = "Templates are working!"; 35 }; 36 }; 37 }; 38 39 extraPythonPackages = p: [ 40 p.requests 41 p.types-requests 42 ]; 43 44 testScript = { nodes, ... }: '' 45 import requests 46 webhookMachine.wait_for_unit("webhook") 47 webhookMachine.wait_for_open_port(${toString internalPort}) 48 49 with subtest("Check that webhooks can be called externally"): 50 response = requests.get("http://localhost:${toString forwardedPort}/hooks/echo") 51 print(f"Response code: {response.status_code}") 52 print("Response: %r" % response.content) 53 54 assert response.status_code == 200 55 assert response.content == b"Webhook is reachable!" 56 57 with subtest("Check that templated webhooks can be called externally"): 58 response = requests.get("http://localhost:${toString forwardedPort}/hooks/echo-template") 59 print(f"Response code: {response.status_code}") 60 print("Response: %r" % response.content) 61 62 assert response.status_code == 200 63 assert response.content == b"Templates are working!" 64 ''; 65}