116 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
		
		
			
		
	
	
			116 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| 
								 | 
							
								import ./make-test.nix ({ pkgs, ... } :
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								let
							 | 
						||
| 
								 | 
							
								  connAuthFile="beegfs/auth-def.key";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  client = { config, pkgs, lib, ... } : {
							 | 
						||
| 
								 | 
							
								    networking.firewall.enable = false;
							 | 
						||
| 
								 | 
							
								    services.beegfsEnable = true;
							 | 
						||
| 
								 | 
							
								    services.beegfs.default = {
							 | 
						||
| 
								 | 
							
								      mgmtdHost = "mgmt";
							 | 
						||
| 
								 | 
							
								      connAuthFile = "/etc/${connAuthFile}";
							 | 
						||
| 
								 | 
							
								      client = {
							 | 
						||
| 
								 | 
							
								        mount = false;
							 | 
						||
| 
								 | 
							
								        enable = true;
							 | 
						||
| 
								 | 
							
								      };
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    fileSystems = pkgs.lib.mkVMOverride # FIXME: this should be creatd by the module
							 | 
						||
| 
								 | 
							
								      [ { mountPoint = "/beegfs";
							 | 
						||
| 
								 | 
							
								          device = "default";
							 | 
						||
| 
								 | 
							
								          fsType = "beegfs";
							 | 
						||
| 
								 | 
							
								          options = [ "cfgFile=/etc/beegfs/client-default.conf" "_netdev" ];
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      ];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    environment.etc."${connAuthFile}" = {
							 | 
						||
| 
								 | 
							
								      enable = true;
							 | 
						||
| 
								 | 
							
								      text = "ThisIsALousySecret";
							 | 
						||
| 
								 | 
							
								      mode = "0600";
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  server = service : { config, pkgs, lib, ... } : {
							 | 
						||
| 
								 | 
							
								    networking.firewall.enable = false;
							 | 
						||
| 
								 | 
							
								    boot.initrd.postDeviceCommands = ''
							 | 
						||
| 
								 | 
							
								      ${pkgs.e2fsprogs}/bin/mkfs.ext4 -L data /dev/vdb
							 | 
						||
| 
								 | 
							
								    '';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    virtualisation.emptyDiskImages = [ 4096 ];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    fileSystems = pkgs.lib.mkVMOverride
							 | 
						||
| 
								 | 
							
								      [ { mountPoint = "/data";
							 | 
						||
| 
								 | 
							
								          device = "/dev/disk/by-label/data";
							 | 
						||
| 
								 | 
							
								          fsType = "ext4";
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      ];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    environment.systemPackages = with pkgs; [ beegfs ];
							 | 
						||
| 
								 | 
							
								    environment.etc."${connAuthFile}" = {
							 | 
						||
| 
								 | 
							
								      enable = true;
							 | 
						||
| 
								 | 
							
								      text = "ThisIsALousySecret";
							 | 
						||
| 
								 | 
							
								      mode = "0600";
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    services.beegfsEnable = true;
							 | 
						||
| 
								 | 
							
								    services.beegfs.default = {
							 | 
						||
| 
								 | 
							
								      mgmtdHost = "mgmt";
							 | 
						||
| 
								 | 
							
								      connAuthFile = "/etc/${connAuthFile}";
							 | 
						||
| 
								 | 
							
								      "${service}" = {
							 | 
						||
| 
								 | 
							
								        enable = true;
							 | 
						||
| 
								 | 
							
								        storeDir = "/data";
							 | 
						||
| 
								 | 
							
								      };
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								in
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  name = "beegfs";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  nodes = {
							 | 
						||
| 
								 | 
							
								    meta = server "meta";
							 | 
						||
| 
								 | 
							
								    mgmt = server "mgmtd";
							 | 
						||
| 
								 | 
							
								    storage1 = server "storage";
							 | 
						||
| 
								 | 
							
								    storage2 = server "storage";
							 | 
						||
| 
								 | 
							
								    client1 = client;
							 | 
						||
| 
								 | 
							
								    client2 = client;
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  testScript = ''
							 | 
						||
| 
								 | 
							
								    # Initalize the data directories
							 | 
						||
| 
								 | 
							
								    $mgmt->waitForUnit("default.target");
							 | 
						||
| 
								 | 
							
								    $mgmt->succeed("beegfs-setup-mgmtd -C -f -p /data");
							 | 
						||
| 
								 | 
							
								    $mgmt->succeed("systemctl start beegfs-mgmtd-default");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    $meta->waitForUnit("default.target");
							 | 
						||
| 
								 | 
							
								    $meta->succeed("beegfs-setup-meta -C -f -s 1 -p /data");
							 | 
						||
| 
								 | 
							
								    $meta->succeed("systemctl start beegfs-meta-default");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    $storage1->waitForUnit("default.target");
							 | 
						||
| 
								 | 
							
								    $storage1->succeed("beegfs-setup-storage -C -f -s 1 -i 1 -p /data");
							 | 
						||
| 
								 | 
							
								    $storage1->succeed("systemctl start beegfs-storage-default");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    $storage2->waitForUnit("default.target");
							 | 
						||
| 
								 | 
							
								    $storage2->succeed("beegfs-setup-storage -C -f -s 2 -i 2 -p /data");
							 | 
						||
| 
								 | 
							
								    $storage2->succeed("systemctl start beegfs-storage-default");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    #
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    # Basic test
							 | 
						||
| 
								 | 
							
								    $client1->waitForUnit("beegfs.mount");
							 | 
						||
| 
								 | 
							
								    $client1->succeed("beegfs-check-servers-default");
							 | 
						||
| 
								 | 
							
								    $client1->succeed("echo test > /beegfs/test");
							 | 
						||
| 
								 | 
							
								    $client2->waitForUnit("beegfs.mount");
							 | 
						||
| 
								 | 
							
								    $client2->succeed("test -e /beegfs/test");
							 | 
						||
| 
								 | 
							
								    $client2->succeed("cat /beegfs/test | grep test");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    # test raid0/stripping
							 | 
						||
| 
								 | 
							
								    $client1->succeed("dd if=/dev/urandom bs=1M count=10 of=/beegfs/striped");
							 | 
						||
| 
								 | 
							
								    $client2->succeed("cat /beegfs/striped > /dev/null");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    # check if fs is still healthy
							 | 
						||
| 
								 | 
							
								    $client1->succeed("beegfs-fsck-default --checkfs");
							 | 
						||
| 
								 | 
							
								  '';
							 | 
						||
| 
								 | 
							
								})
							 |