summaryrefslogtreecommitdiff
path: root/pkgs
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--pkgs/default.nix1
-rw-r--r--pkgs/increment-zone-serials/default.nix17
-rwxr-xr-xpkgs/increment-zone-serials/increment-zone-serials.py45
3 files changed, 63 insertions, 0 deletions
diff --git a/pkgs/default.nix b/pkgs/default.nix
index 82f6380..36dc309 100644
--- a/pkgs/default.nix
+++ b/pkgs/default.nix
@@ -8,6 +8,7 @@ in
btclone = callPackage ./btclone { };
gem5 = callPackage ./gem5.nix { gem5ISA = "x86"; };
git-aliases = callPackage ./git-aliases.nix { };
+ increment-zone-serials = callPackage ./increment-zone-serials { };
kbuild-standalone = callPackage ./kbuild-standalone.nix { };
mssql-tools = callPackage ./mssql-tools.nix { };
oregano = callPackage ./oregano { };
diff --git a/pkgs/increment-zone-serials/default.nix b/pkgs/increment-zone-serials/default.nix
new file mode 100644
index 0000000..b5b6cd6
--- /dev/null
+++ b/pkgs/increment-zone-serials/default.nix
@@ -0,0 +1,17 @@
+{ python3
+, stdenv
+}:
+stdenv.mkDerivation {
+ pname = "increment-zone-serials";
+ version = "1.0.0";
+
+ propagatedBuildInputs = [
+ (python3.withPackages (py: [ ]))
+ ];
+
+ dontUnpack = true;
+
+ installPhase = ''
+ install -Dm755 ${./increment-zone-serials.py} $out/bin/increment-zone-serials
+ '';
+}
diff --git a/pkgs/increment-zone-serials/increment-zone-serials.py b/pkgs/increment-zone-serials/increment-zone-serials.py
new file mode 100755
index 0000000..2d5753a
--- /dev/null
+++ b/pkgs/increment-zone-serials/increment-zone-serials.py
@@ -0,0 +1,45 @@
+#!/usr/bin/env python3
+
+import datetime, json, os.path, sys
+
+base_dir = sys.argv[1]
+
+serial_num = lambda n: f'{today}{n:02}'
+today_str = datetime.datetime.utcnow().date().strftime('%Y%m%d')
+today = int(today_str)
+
+paths = []
+
+for zone, data in json.load(sys.stdin).items():
+ expected_hash = data['expected']
+
+ old_serial_int = data['serial']
+ new_serial = serial_num(0)
+
+ if old_serial_int is not None:
+ old_serial = str(old_serial_int)
+ if len(old_serial) > len(new_serial):
+ new_serial = None
+ elif len(old_serial) == len(new_serial):
+ old_day = int(old_serial[:len(today_str)])
+ if old_day >= today:
+ new_serial = None
+
+ if new_serial is None:
+ new_serial = str(old_serial_int + 1)
+
+ path = os.path.join(base_dir, zone, 'serial.nix')
+ with open(os.path.join(base_dir, zone, 'serial.nix'), 'w') as serial_file:
+ print(f'''\
+{{
+ config = {{
+ soa.serial = {new_serial};
+ nullSerialHash = "{expected_hash}";
+ }};
+}}
+''', file=serial_file)
+ paths.append(path)
+
+# Se imprime al final para evitar estados intermedios si algo tira excepción
+for path in paths:
+ print(path)