| 
									
										
										
										
											2014-11-21 17:20:14 +01:00
										 |  |  | { config, lib, pkgs, ... }: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | with lib; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | let | 
					
						
							|  |  |  |   cfg = config.services.dockerRegistry; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | in { | 
					
						
							|  |  |  |   ###### interface | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   options.services.dockerRegistry = { | 
					
						
							|  |  |  |     enable = mkOption { | 
					
						
							|  |  |  |       description = "Whether to enable docker registry server."; | 
					
						
							|  |  |  |       default = false; | 
					
						
							|  |  |  |       type = types.bool; | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-24 00:06:40 +01:00
										 |  |  |     listenAddress = mkOption { | 
					
						
							| 
									
										
										
										
											2014-11-21 17:20:14 +01:00
										 |  |  |       description = "Docker registry host or ip to bind to."; | 
					
						
							|  |  |  |       default = "127.0.0.1"; | 
					
						
							|  |  |  |       type = types.str; | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     port = mkOption { | 
					
						
							|  |  |  |       description = "Docker registry port to bind to."; | 
					
						
							|  |  |  |       default = 5000; | 
					
						
							|  |  |  |       type = types.int; | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     storagePath = mkOption { | 
					
						
							|  |  |  |       type = types.path; | 
					
						
							| 
									
										
										
										
											2015-04-25 14:23:31 +02:00
										 |  |  |       default = "/var/lib/docker-registry"; | 
					
						
							| 
									
										
										
										
											2015-04-09 20:58:01 +02:00
										 |  |  |       description = "Docker registry storage path."; | 
					
						
							| 
									
										
										
										
											2014-11-21 17:20:14 +01:00
										 |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     extraConfig = mkOption { | 
					
						
							|  |  |  |       description = ''
 | 
					
						
							|  |  |  |         Docker extra registry configuration. See | 
					
						
							|  |  |  |         <link xlink:href="https://github.com/docker/docker-registry/blob/master/config/config_sample.yml"/> | 
					
						
							|  |  |  |       '';
 | 
					
						
							|  |  |  |       default = {}; | 
					
						
							|  |  |  |       type = types.attrsOf types.str; | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   config = mkIf cfg.enable { | 
					
						
							|  |  |  |     systemd.services.docker-registry = { | 
					
						
							|  |  |  |       description = "Docker Container Registry"; | 
					
						
							|  |  |  |       wantedBy = [ "multi-user.target" ]; | 
					
						
							|  |  |  |       after = [ "network.target" ]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       environment = { | 
					
						
							| 
									
										
										
										
											2015-12-24 00:06:40 +01:00
										 |  |  |         REGISTRY_HOST = cfg.listenAddress; | 
					
						
							| 
									
										
										
										
											2014-11-21 17:20:14 +01:00
										 |  |  |         REGISTRY_PORT = toString cfg.port; | 
					
						
							|  |  |  |         GUNICORN_OPTS = "[--preload]"; # see https://github.com/docker/docker-registry#sqlalchemy | 
					
						
							|  |  |  |         STORAGE_PATH = cfg.storagePath; | 
					
						
							|  |  |  |       } // cfg.extraConfig; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       serviceConfig = { | 
					
						
							|  |  |  |         ExecStart = "${pkgs.pythonPackages.docker_registry}/bin/docker-registry"; | 
					
						
							|  |  |  |         User = "docker-registry"; | 
					
						
							|  |  |  |         Group = "docker"; | 
					
						
							|  |  |  |         PermissionsStartOnly = true; | 
					
						
							| 
									
										
										
										
											2015-04-25 14:23:31 +02:00
										 |  |  |         WorkingDirectory = cfg.storagePath; | 
					
						
							| 
									
										
										
										
											2014-11-21 17:20:14 +01:00
										 |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       postStart = ''
 | 
					
						
							| 
									
										
										
										
											2016-01-19 09:55:31 +01:00
										 |  |  |         until ${pkgs.curl.bin}/bin/curl -s -o /dev/null 'http://${cfg.listenAddress}:${toString cfg.port}/'; do | 
					
						
							| 
									
										
										
										
											2014-11-21 17:20:14 +01:00
										 |  |  |           sleep 1; | 
					
						
							|  |  |  |         done | 
					
						
							|  |  |  |       '';
 | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     users.extraGroups.docker.gid = mkDefault config.ids.gids.docker; | 
					
						
							| 
									
										
										
										
											2015-04-25 14:23:31 +02:00
										 |  |  |     users.extraUsers.docker-registry = { | 
					
						
							|  |  |  |       createHome = true; | 
					
						
							|  |  |  |       home = cfg.storagePath; | 
					
						
							|  |  |  |       uid = config.ids.uids.docker-registry; | 
					
						
							|  |  |  |     }; | 
					
						
							| 
									
										
										
										
											2014-11-21 17:20:14 +01:00
										 |  |  |   }; | 
					
						
							|  |  |  | } |