91 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
		
		
			
		
	
	
			91 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| 
								 | 
							
								import ./make-test-python.nix ({ pkgs, ... }: let
							 | 
						||
| 
								 | 
							
								  inherit (import ./ssh-keys.nix pkgs)
							 | 
						||
| 
								 | 
							
								    snakeOilPrivateKey snakeOilPublicKey;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  commonConfig = { pkgs, ... }: {
							 | 
						||
| 
								 | 
							
								    virtualisation.emptyDiskImages = [ 2048 ];
							 | 
						||
| 
								 | 
							
								    boot.supportedFilesystems = [ "zfs" ];
							 | 
						||
| 
								 | 
							
								    environment.systemPackages = [ pkgs.parted ];
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								in {
							 | 
						||
| 
								 | 
							
								  name = "sanoid";
							 | 
						||
| 
								 | 
							
								  meta = with pkgs.stdenv.lib.maintainers; {
							 | 
						||
| 
								 | 
							
								    maintainers = [ lopsided98 ];
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  nodes = {
							 | 
						||
| 
								 | 
							
								    source = { ... }: {
							 | 
						||
| 
								 | 
							
								      imports = [ commonConfig ];
							 | 
						||
| 
								 | 
							
								      networking.hostId = "daa82e91";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      programs.ssh.extraConfig = ''
							 | 
						||
| 
								 | 
							
								        UserKnownHostsFile=/dev/null
							 | 
						||
| 
								 | 
							
								        StrictHostKeyChecking=no
							 | 
						||
| 
								 | 
							
								      '';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      services.sanoid = {
							 | 
						||
| 
								 | 
							
								        enable = true;
							 | 
						||
| 
								 | 
							
								        templates.test = {
							 | 
						||
| 
								 | 
							
								          hourly = 12;
							 | 
						||
| 
								 | 
							
								          daily = 1;
							 | 
						||
| 
								 | 
							
								          monthly = 1;
							 | 
						||
| 
								 | 
							
								          yearly = 1;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								          autosnap = true;
							 | 
						||
| 
								 | 
							
								        };
							 | 
						||
| 
								 | 
							
								        datasets."pool/test".useTemplate = [ "test" ];
							 | 
						||
| 
								 | 
							
								      };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      services.syncoid = {
							 | 
						||
| 
								 | 
							
								        enable = true;
							 | 
						||
| 
								 | 
							
								        sshKey = "/root/.ssh/id_ecdsa";
							 | 
						||
| 
								 | 
							
								        commonArgs = [ "--no-sync-snap" ];
							 | 
						||
| 
								 | 
							
								        commands."pool/test".target = "root@target:pool/test";
							 | 
						||
| 
								 | 
							
								      };
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    target = { ... }: {
							 | 
						||
| 
								 | 
							
								      imports = [ commonConfig ];
							 | 
						||
| 
								 | 
							
								      networking.hostId = "dcf39d36";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      services.openssh.enable = true;
							 | 
						||
| 
								 | 
							
								      users.users.root.openssh.authorizedKeys.keys = [ snakeOilPublicKey ];
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  testScript = ''
							 | 
						||
| 
								 | 
							
								    source.succeed(
							 | 
						||
| 
								 | 
							
								        "mkdir /tmp/mnt",
							 | 
						||
| 
								 | 
							
								        "parted --script /dev/vdb -- mklabel msdos mkpart primary 1024M -1s",
							 | 
						||
| 
								 | 
							
								        "udevadm settle",
							 | 
						||
| 
								 | 
							
								        "zpool create pool /dev/vdb1",
							 | 
						||
| 
								 | 
							
								        "zfs create -o mountpoint=legacy pool/test",
							 | 
						||
| 
								 | 
							
								        "mount -t zfs pool/test /tmp/mnt",
							 | 
						||
| 
								 | 
							
								        "udevadm settle",
							 | 
						||
| 
								 | 
							
								    )
							 | 
						||
| 
								 | 
							
								    target.succeed(
							 | 
						||
| 
								 | 
							
								        "parted --script /dev/vdb -- mklabel msdos mkpart primary 1024M -1s",
							 | 
						||
| 
								 | 
							
								        "udevadm settle",
							 | 
						||
| 
								 | 
							
								        "zpool create pool /dev/vdb1",
							 | 
						||
| 
								 | 
							
								        "udevadm settle",
							 | 
						||
| 
								 | 
							
								    )
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    source.succeed("mkdir -m 700 /root/.ssh")
							 | 
						||
| 
								 | 
							
								    source.succeed(
							 | 
						||
| 
								 | 
							
								        "cat '${snakeOilPrivateKey}' > /root/.ssh/id_ecdsa"
							 | 
						||
| 
								 | 
							
								    )
							 | 
						||
| 
								 | 
							
								    source.succeed("chmod 600 /root/.ssh/id_ecdsa")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    source.succeed("touch /tmp/mnt/test.txt")
							 | 
						||
| 
								 | 
							
								    source.systemctl("start --wait sanoid.service")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    target.wait_for_open_port(22)
							 | 
						||
| 
								 | 
							
								    source.systemctl("start --wait syncoid.service")
							 | 
						||
| 
								 | 
							
								    target.succeed(
							 | 
						||
| 
								 | 
							
								        "mkdir /tmp/mnt",
							 | 
						||
| 
								 | 
							
								        "zfs set mountpoint=legacy pool/test",
							 | 
						||
| 
								 | 
							
								        "mount -t zfs pool/test /tmp/mnt",
							 | 
						||
| 
								 | 
							
								    )
							 | 
						||
| 
								 | 
							
								    target.succeed("cat /tmp/mnt/test.txt")
							 | 
						||
| 
								 | 
							
								  '';
							 | 
						||
| 
								 | 
							
								})
							 |