From 07bd9b8bf7c3968028658922c4b19a7374418247 Mon Sep 17 00:00:00 2001
From: Jean-Paul Calderone <exarkun@twistedmatrix.com>
Date: Mon, 23 Sep 2019 12:01:33 -0400
Subject: [PATCH] Statically assign addresses to all of the nodes

---
 nixos/modules/tests/private-storage.nix | 37 ++++++++++++++++++++++++-
 1 file changed, 36 insertions(+), 1 deletion(-)

diff --git a/nixos/modules/tests/private-storage.nix b/nixos/modules/tests/private-storage.nix
index d6e5f639..38efce8d 100644
--- a/nixos/modules/tests/private-storage.nix
+++ b/nixos/modules/tests/private-storage.nix
@@ -62,11 +62,46 @@ VzowmHAqdxYvlfJsWe91UI0=
     name = "introducer.furl";
     text = introducerFURL;
   };
+
+  # assignAddresses :: Set Name (Set -> AttrSet) -> Set Name (Set -> AttrSet)
+  assignAddresses = nodes:
+    let
+      # makeNetwork :: Integer -> AttrSet
+      makeNetwork = n: {
+        networking.firewall.enable = false;
+        networking.useDHCP = false;
+        networking.interfaces.eth0.ipv4.addresses = [
+          { address = "192.168.0.${toString n}"; prefixLength = 24; }
+        ];
+      };
+      # addresses :: [Integer]
+      addresses = pkgs.lib.range 0 (builtins.length (builtins.attrNames nodes));
+      # nodesAsList :: [(Name, (Set -> AttrSet))]
+      nodesAsList = pkgs.lib.attrsets.mapAttrsToList (name: value: [name value]) nodes;
+      # nodeAndNetworkList :: [[Name, Set -> AttrSet], Integer]
+      nodeAndNetworkList = pkgs.lib.lists.zipListsWith (fst: snd: [fst snd]) nodesAsList addresses;
+
+      # mergeNodeAndNetwork :: Integer -> Name -> (Set -> AttrSet) -> {Name, (Set -> AttrSet)}
+      mergeNodeAndNetwork = number: name: node: {
+        inherit name;
+        value = args@{ pkgs, ... }: ((node args) // (makeNetwork number));
+      };
+      at = builtins.elemAt;
+      merged = map (elem:
+        let
+          node = (at (at elem 0) 1);
+          name = (at (at elem 0) 0);
+          number = (at elem 1);
+        in
+          mergeNodeAndNetwork number name node
+      ) nodeAndNetworkList;
+    in
+      builtins.listToAttrs merged;
 in
 # https://nixos.org/nixos/manual/index.html#sec-nixos-tests
 import <nixpkgs/nixos/tests/make-test.nix> {
 
-  nodes = rec {
+  nodes = assignAddresses rec {
     # Get a machine where we can run a Tahoe-LAFS client node.
     client =
       { config, pkgs, ... }:
-- 
GitLab