| 
									
										
										
										
											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 = ""; | 
					
						
							|  |  |  |       type = types.string; | 
					
						
							|  |  |  |       description = ''
 | 
					
						
							|  |  |  |         Contents of the <filename>drbd.conf</filename> configuration file. | 
					
						
							|  |  |  |       '';
 | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    | 
					
						
							|  |  |  |   ###### implementation | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   config = mkIf cfg.enable { | 
					
						
							|  |  |  |    | 
					
						
							|  |  |  |     environment.systemPackages = [ pkgs.drbd ]; | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     services.udev.packages = [ pkgs.drbd ]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     boot.kernelModules = [ "drbd" ]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     boot.extraModprobeConfig = | 
					
						
							|  |  |  |       ''
 | 
					
						
							| 
									
										
										
										
											2012-07-16 11:27:59 -04:00
										 |  |  |         options drbd usermode_helper=/run/current-system/sw/sbin/drbdadm | 
					
						
							| 
									
										
										
										
											2011-11-03 02:14:57 +00:00
										 |  |  |       '';
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     environment.etc = singleton | 
					
						
							|  |  |  |       { source = pkgs.writeText "drbd.conf" cfg.config; | 
					
						
							|  |  |  |         target = "drbd.conf"; | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     jobs.drbd_up = | 
					
						
							|  |  |  |       { name = "drbd-up"; | 
					
						
							|  |  |  |         startOn = "stopped udevtrigger or ip-up"; | 
					
						
							|  |  |  |         task = true; | 
					
						
							|  |  |  |         script = | 
					
						
							|  |  |  |           ''
 | 
					
						
							|  |  |  |             ${pkgs.drbd}/sbin/drbdadm up all | 
					
						
							|  |  |  |           '';
 | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     jobs.drbd_down = | 
					
						
							|  |  |  |       { name = "drbd-down"; | 
					
						
							|  |  |  |         startOn = "starting shutdown"; | 
					
						
							|  |  |  |         task = true; | 
					
						
							|  |  |  |         script = | 
					
						
							|  |  |  |           ''
 | 
					
						
							|  |  |  |             ${pkgs.drbd}/sbin/drbdadm down all | 
					
						
							|  |  |  |           '';
 | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  |    | 
					
						
							|  |  |  | } |