at 24.11-pre 2.9 kB view raw
1import ./make-test-python.nix ({ pkgs, ...} : { 2 name = "litestream"; 3 meta = with pkgs.lib.maintainers; { 4 maintainers = [ jwygoda ]; 5 }; 6 7 nodes.machine = 8 { pkgs, ... }: 9 { services.litestream = { 10 enable = true; 11 settings = { 12 dbs = [ 13 { 14 path = "/var/lib/grafana/data/grafana.db"; 15 replicas = [{ 16 url = "sftp://foo:bar@127.0.0.1:22/home/foo/grafana"; 17 }]; 18 } 19 ]; 20 }; 21 }; 22 systemd.services.grafana.serviceConfig.ExecStartPost = "+" + pkgs.writeShellScript "grant-grafana-permissions" '' 23 timeout=10 24 25 while [ ! -f /var/lib/grafana/data/grafana.db ]; 26 do 27 if [ "$timeout" == 0 ]; then 28 echo "ERROR: Timeout while waiting for /var/lib/grafana/data/grafana.db." 29 exit 1 30 fi 31 32 sleep 1 33 34 ((timeout--)) 35 done 36 37 find /var/lib/grafana -type d -exec chmod -v 775 {} \; 38 find /var/lib/grafana -type f -exec chmod -v 660 {} \; 39 ''; 40 services.openssh = { 41 enable = true; 42 allowSFTP = true; 43 listenAddresses = [ { addr = "127.0.0.1"; port = 22; } ]; 44 }; 45 services.grafana = { 46 enable = true; 47 settings = { 48 security = { 49 admin_user = "admin"; 50 admin_password = "admin"; 51 }; 52 53 server = { 54 http_addr = "localhost"; 55 http_port = 3000; 56 }; 57 58 database = { 59 type = "sqlite3"; 60 path = "/var/lib/grafana/data/grafana.db"; 61 wal = true; 62 }; 63 }; 64 }; 65 users.users.foo = { 66 isNormalUser = true; 67 password = "bar"; 68 }; 69 users.users.litestream.extraGroups = [ "grafana" ]; 70 }; 71 72 testScript = '' 73 start_all() 74 machine.wait_until_succeeds("test -d /home/foo/grafana") 75 machine.wait_for_open_port(3000) 76 machine.succeed(""" 77 curl -sSfN -X PUT -H "Content-Type: application/json" -d '{ 78 "oldPassword": "admin", 79 "newPassword": "newpass", 80 "confirmNew": "newpass" 81 }' http://admin:admin@127.0.0.1:3000/api/user/password 82 """) 83 # https://litestream.io/guides/systemd/#simulating-a-disaster 84 machine.systemctl("stop litestream.service") 85 machine.succeed( 86 "rm -f /var/lib/grafana/data/grafana.db " 87 "/var/lib/grafana/data/grafana.db-shm " 88 "/var/lib/grafana/data/grafana.db-wal" 89 ) 90 machine.succeed( 91 "litestream restore /var/lib/grafana/data/grafana.db " 92 "&& chown grafana:grafana /var/lib/grafana/data/grafana.db " 93 "&& chmod 660 /var/lib/grafana/data/grafana.db" 94 ) 95 machine.systemctl("restart grafana.service") 96 machine.wait_for_open_port(3000) 97 machine.succeed( 98 "curl -sSfN -u admin:newpass http://127.0.0.1:3000/api/org/users | grep admin\@localhost" 99 ) 100 ''; 101})