| 
									
										
										
										
											2011-11-03 02:14:57 +00:00
										 |  |  | # Support for DRBD, the Distributed Replicated Block Device. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-14 16:26:48 +02:00
										 |  |  | { config, lib, pkgs, ... }: | 
					
						
							| 
									
										
										
										
											2011-11-03 02:14:57 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-14 16:26:48 +02:00
										 |  |  | with lib; | 
					
						
							| 
									
										
										
										
											2011-11-03 02:14:57 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | let cfg = config.services.drbd; in | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   ###### interface | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   options = { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     services.drbd.enable = mkOption { | 
					
						
							|  |  |  |       default = false; | 
					
						
							|  |  |  |       type = types.bool; | 
					
						
							|  |  |  |       description = ''
 | 
					
						
							|  |  |  |         Whether to enable support for DRBD, the Distributed Replicated | 
					
						
							|  |  |  |         Block Device. | 
					
						
							|  |  |  |       '';
 | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     services.drbd.config = mkOption { | 
					
						
							|  |  |  |       default = ""; | 
					
						
							| 
									
										
										
										
											2019-08-08 22:48:27 +02:00
										 |  |  |       type = types.lines; | 
					
						
							| 
									
										
										
										
											2011-11-03 02:14:57 +00:00
										 |  |  |       description = ''
 | 
					
						
							|  |  |  |         Contents of the <filename>drbd.conf</filename> configuration file. | 
					
						
							|  |  |  |       '';
 | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-06 06:50:18 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-11-03 02:14:57 +00:00
										 |  |  |   ###### implementation | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   config = mkIf cfg.enable { | 
					
						
							| 
									
										
										
										
											2016-01-06 06:50:18 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-11-03 02:14:57 +00:00
										 |  |  |     environment.systemPackages = [ pkgs.drbd ]; | 
					
						
							| 
									
										
										
										
											2016-01-06 06:50:18 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-11-03 02:14:57 +00:00
										 |  |  |     services.udev.packages = [ pkgs.drbd ]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     boot.kernelModules = [ "drbd" ]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     boot.extraModprobeConfig = | 
					
						
							|  |  |  |       ''
 | 
					
						
							| 
									
										
										
										
											2015-04-01 13:57:06 -07:00
										 |  |  |         options drbd usermode_helper=/run/current-system/sw/bin/drbdadm | 
					
						
							| 
									
										
										
										
											2011-11-03 02:14:57 +00:00
										 |  |  |       '';
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-14 19:51:29 +02:00
										 |  |  |     environment.etc.drbd.conf = | 
					
						
							|  |  |  |       { source = pkgs.writeText "drbd.conf" cfg.config; }; | 
					
						
							| 
									
										
										
										
											2011-11-03 02:14:57 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-06 06:50:18 +00:00
										 |  |  |     systemd.services.drbd = { | 
					
						
							| 
									
										
										
										
											2016-09-10 18:03:59 +02:00
										 |  |  |       after = [ "systemd-udev.settle.service" "network.target" ]; | 
					
						
							| 
									
										
										
										
											2016-01-06 06:50:18 +00:00
										 |  |  |       wants = [ "systemd-udev.settle.service" ]; | 
					
						
							| 
									
										
										
										
											2016-09-10 18:03:59 +02:00
										 |  |  |       wantedBy = [ "multi-user.target" ]; | 
					
						
							| 
									
										
										
										
											2016-01-06 06:50:18 +00:00
										 |  |  |       script = ''
 | 
					
						
							|  |  |  |         ${pkgs.drbd}/sbin/drbdadm up all | 
					
						
							|  |  |  |       '';
 | 
					
						
							|  |  |  |       serviceConfig.ExecStop = ''
 | 
					
						
							|  |  |  |         ${pkgs.drbd}/sbin/drbdadm down all | 
					
						
							|  |  |  |       '';
 | 
					
						
							|  |  |  |     }; | 
					
						
							| 
									
										
										
										
											2011-11-03 02:14:57 +00:00
										 |  |  |   }; | 
					
						
							|  |  |  | } |