at 23.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 security = { 48 adminUser = "admin"; 49 adminPassword = "admin"; 50 }; 51 addr = "localhost"; 52 port = 3000; 53 extraOptions = { 54 DATABASE_URL = "sqlite3:///var/lib/grafana/data/grafana.db?cache=private&mode=rwc&_journal_mode=WAL"; 55 }; 56 }; 57 users.users.foo = { 58 isNormalUser = true; 59 password = "bar"; 60 }; 61 users.users.litestream.extraGroups = [ "grafana" ]; 62 }; 63 64 testScript = '' 65 start_all() 66 machine.wait_until_succeeds("test -d /home/foo/grafana") 67 machine.wait_for_open_port(3000) 68 machine.succeed(""" 69 curl -sSfN -X PUT -H "Content-Type: application/json" -d '{ 70 "oldPassword": "admin", 71 "newPassword": "newpass", 72 "confirmNew": "newpass" 73 }' http://admin:admin@127.0.0.1:3000/api/user/password 74 """) 75 # https://litestream.io/guides/systemd/#simulating-a-disaster 76 machine.systemctl("stop litestream.service") 77 machine.succeed( 78 "rm -f /var/lib/grafana/data/grafana.db " 79 "/var/lib/grafana/data/grafana.db-shm " 80 "/var/lib/grafana/data/grafana.db-wal" 81 ) 82 machine.succeed( 83 "litestream restore /var/lib/grafana/data/grafana.db " 84 "&& chown grafana:grafana /var/lib/grafana/data/grafana.db " 85 "&& chmod 660 /var/lib/grafana/data/grafana.db" 86 ) 87 machine.systemctl("restart grafana.service") 88 machine.wait_for_open_port(3000) 89 machine.succeed( 90 "curl -sSfN -u admin:newpass http://127.0.0.1:3000/api/org/users | grep admin\@localhost" 91 ) 92 ''; 93})