about summary refs log tree commit diff
path: root/nixos/modules/services/misc/docker-registry.nix
diff options
context:
space:
mode:
authorMichele Catalano <michele@catalano.de>2018-04-06 15:11:52 +0200
committerMaximilian Bosch <maximilian@mbosch.me>2018-05-01 15:23:47 +0200
commitafd3136e8efe2cbd477cb6db7be5ad7b2eb7efc6 (patch)
treeed76d7008c48e4d746db480cad607561e668af17 /nixos/modules/services/misc/docker-registry.nix
parent593dc4514192354491473ba00e1b9104f456c50c (diff)
downloadnixlib-afd3136e8efe2cbd477cb6db7be5ad7b2eb7efc6.tar
nixlib-afd3136e8efe2cbd477cb6db7be5ad7b2eb7efc6.tar.gz
nixlib-afd3136e8efe2cbd477cb6db7be5ad7b2eb7efc6.tar.bz2
nixlib-afd3136e8efe2cbd477cb6db7be5ad7b2eb7efc6.tar.lz
nixlib-afd3136e8efe2cbd477cb6db7be5ad7b2eb7efc6.tar.xz
nixlib-afd3136e8efe2cbd477cb6db7be5ad7b2eb7efc6.tar.zst
nixlib-afd3136e8efe2cbd477cb6db7be5ad7b2eb7efc6.zip
nixos/docker-registry: Add support for garbage collector to docker registry
Diffstat (limited to 'nixos/modules/services/misc/docker-registry.nix')
-rw-r--r--nixos/modules/services/misc/docker-registry.nix41
1 files changed, 33 insertions, 8 deletions
diff --git a/nixos/modules/services/misc/docker-registry.nix b/nixos/modules/services/misc/docker-registry.nix
index c0dbcf380db3..45931cb42b54 100644
--- a/nixos/modules/services/misc/docker-registry.nix
+++ b/nixos/modules/services/misc/docker-registry.nix
@@ -42,6 +42,8 @@ let
     };
   };
 
+  configFile = pkgs.writeText "docker-registry-config.yml" (builtins.toJSON (registryConfig // cfg.extraConfig));
+
 in {
   options.services.dockerRegistry = {
     enable = mkEnableOption "Docker Registry";
@@ -70,11 +72,7 @@ in {
       description = "Enable delete for manifests and blobs.";
     };
 
-    enableRedisCache = mkOption {
-      type = types.bool;
-      default = false;
-      description = "Enable redis as blob cache instade of inmemory.";
-    };
+    enableRedisCache = mkEnableOption "redis as blob cache";
 
     redisUrl = mkOption {
       type = types.str;
@@ -95,6 +93,19 @@ in {
       default = {};
       type = types.attrsOf types.str;
     };
+
+    enableGarbageCollect = mkEnableOption "garbage collect";
+
+    garbageCollectDates = mkOption {
+      default = "daily";
+      type = types.str;
+      description = ''
+        Specification (in the format described by
+        <citerefentry><refentrytitle>systemd.time</refentrytitle>
+        <manvolnum>7</manvolnum></citerefentry>) of the time at
+        which the garbage collect will occur.
+      '';
+    };
   };
 
   config = mkIf cfg.enable {
@@ -102,9 +113,7 @@ in {
       description = "Docker Container Registry";
       wantedBy = [ "multi-user.target" ];
       after = [ "network.target" ];
-      script = let
-        configFile = pkgs.writeText "docker-registry-config.yml" (builtins.toJSON (registryConfig // cfg.extraConfig));
-      in ''
+      script = ''
         ${pkgs.docker-distribution}/bin/registry serve ${configFile}
       '';
 
@@ -114,6 +123,22 @@ in {
       };
     };
 
+    systemd.services.docker-registry-garbage-collect = {
+      description = "Run Garbage Collection for docker registry";
+
+      restartIfChanged = false;
+      unitConfig.X-StopOnRemoval = false;
+
+      serviceConfig.Type = "oneshot";
+
+      script = ''
+        ${pkgs.docker-distribution}/bin/registry garbage-collect ${configFile}
+        ${pkgs.systemd}/bin/systemctl restart docker-registry.service
+      '';
+
+      startAt = optional cfg.enableGarbageCollect cfg.garbageCollectDates;
+    };
+
     users.extraUsers.docker-registry = {
       createHome = true;
       home = cfg.storagePath;