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