From 512b1fc75bff1f27b8998e9e770f6f680fb92e9e Mon Sep 17 00:00:00 2001 From: arcnmx Date: Sat, 22 Jun 2024 23:00:21 -0700 Subject: [PATCH] fix(tf): trim ipv6 addresses --- ci/systems.json | 2 +- lib.nix | 16 ++++++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/ci/systems.json b/ci/systems.json index 083f6dba..92c899de 100644 --- a/ci/systems.json +++ b/ci/systems.json @@ -28,7 +28,7 @@ "int": null, "local": { "address4": null, - "address6": "fd0a::9e6b:00ff:fe21:1ce2", + "address6": "fd0a::9e6b:ff:fe21:1ce2", "macAddress": "9c:6b:00:21:1c:e2" }, "tail": null diff --git a/lib.nix b/lib.nix index f7a1bcf6..4f329d08 100644 --- a/lib.nix +++ b/lib.nix @@ -6,6 +6,8 @@ nixlib = inputs.nixpkgs.lib; inherit (nixlib.modules) mkOrder mkOverride defaultOverridePriority; inherit (nixlib.attrsets) mapAttrs listToAttrs; + inherit (nixlib.lists) elem elemAt; + inherit (nixlib.strings) match; inherit (inputs.self.lib.Std) List Str Regex UInt Opt; eui64 = mac: let @@ -17,7 +19,16 @@ nibble0 = Str.index part 0; in nibble0 + UInt.toHexLower nibble1; - in "${part0 (part 0)}${part 1}:${part 2}ff:fe${part 3}:${part 4}${part 5}"; + in trimAddress6 "${part0 (part 0)}${part 1}:${part 2}ff:fe${part 3}:${part 4}${part 5}"; + + trimAddress6 = let + matcher = match ''(^|.*:)(0+)([0-9a-fA-F].*)''; + in addr: let + matched = matcher addr; + prefix = elemAt matched 0; + postfix = elemAt matched 2; + addrReplaced = prefix + postfix; + in if matched == null then addr else trimAddress6 addrReplaced; parseUrl = url: let parts' = Regex.match ''^([^:]+)://(\[[0-9a-fA-F:]+]|[^/:\[]+)(|:[0-9]+)(|/.*)$'' url; @@ -36,7 +47,7 @@ path = List.index parts 3; }; - userIs = group: user: builtins.elem group (user.extraGroups ++ [user.group]); + userIs = group: user: elem group (user.extraGroups ++ [user.group]); mkWinPath = Str.replace ["/"] ["\\"]; mkBaseDn = domain: Str.concatMapSep "," (part: "dc=${part}") (Regex.splitOn "\\." domain); @@ -100,6 +111,7 @@ in { mkWinPath mkBaseDn mkAddress6 + trimAddress6 mapListToAttrs coalesce mkAlmostOptionDefault