1{ pkgs, ... }: 2{ 3 name = "db-rest"; 4 meta.maintainers = with pkgs.lib.maintainers; [ marie ]; 5 6 nodes = { 7 database = { 8 networking = { 9 interfaces.eth1 = { 10 ipv4.addresses = [ 11 { 12 address = "192.168.2.10"; 13 prefixLength = 24; 14 } 15 ]; 16 }; 17 firewall.allowedTCPPorts = [ 31638 ]; 18 }; 19 20 services.redis.servers.db-rest = { 21 enable = true; 22 bind = "0.0.0.0"; 23 requirePass = "choochoo"; 24 port = 31638; 25 }; 26 }; 27 28 serverWithTcp = 29 { pkgs, ... }: 30 { 31 environment = { 32 etc = { 33 "db-rest/password-redis-db".text = '' 34 choochoo 35 ''; 36 }; 37 }; 38 39 networking = { 40 interfaces.eth1 = { 41 ipv4.addresses = [ 42 { 43 address = "192.168.2.11"; 44 prefixLength = 24; 45 } 46 ]; 47 }; 48 firewall.allowedTCPPorts = [ 3000 ]; 49 }; 50 51 services.db-rest = { 52 enable = true; 53 host = "0.0.0.0"; 54 redis = { 55 enable = true; 56 createLocally = false; 57 host = "192.168.2.10"; 58 port = 31638; 59 passwordFile = "/etc/db-rest/password-redis-db"; 60 useSSL = false; 61 }; 62 }; 63 }; 64 65 serverWithUnixSocket = 66 { pkgs, ... }: 67 { 68 networking = { 69 interfaces.eth1 = { 70 ipv4.addresses = [ 71 { 72 address = "192.168.2.12"; 73 prefixLength = 24; 74 } 75 ]; 76 }; 77 firewall.allowedTCPPorts = [ 3000 ]; 78 }; 79 80 services.db-rest = { 81 enable = true; 82 host = "0.0.0.0"; 83 redis = { 84 enable = true; 85 createLocally = true; 86 }; 87 }; 88 }; 89 90 client = { 91 environment.systemPackages = [ pkgs.jq ]; 92 networking = { 93 interfaces.eth1 = { 94 ipv4.addresses = [ 95 { 96 address = "192.168.2.13"; 97 prefixLength = 24; 98 } 99 ]; 100 }; 101 }; 102 }; 103 }; 104 105 testScript = '' 106 start_all() 107 108 with subtest("db-rest redis with TCP socket"): 109 database.wait_for_unit("redis-db-rest.service") 110 database.wait_for_open_port(31638) 111 112 serverWithTcp.wait_for_unit("db-rest.service") 113 serverWithTcp.wait_for_open_port(3000) 114 115 client.succeed("curl --fail --get http://192.168.2.11:3000/stations --data-urlencode 'query=Köln Hbf' | jq -r '.\"8000207\".name' | grep 'Köln Hbf'") 116 117 with subtest("db-rest redis with Unix socket"): 118 serverWithUnixSocket.wait_for_unit("db-rest.service") 119 serverWithUnixSocket.wait_for_open_port(3000) 120 121 client.succeed("curl --fail --get http://192.168.2.12:3000/stations --data-urlencode 'query=Köln Hbf' | jq -r '.\"8000207\".name' | grep 'Köln Hbf'") 122 ''; 123}