let # Pin the deployment package-set to a specific version of nixpkgs. This is # NixOS 19.03 as of Aug 28 2019. There's nothing special about it. It's # just recent at the time of development. It can be upgraded when there is # value in doing so. Meanwhile, our platform doesn't shift around beneath # us in surprising ways as time passes. pkgs = import (builtins.fetchTarball { url = "https://github.com/NixOS/nixpkgs/archive/3c83ad6ac13b67101cc3e2e07781963a010c1624.tar.gz"; sha256 = "0cdq342wrkvkyccygpp1gvwp7hhqg68hljjwld4vjixm901ayy14"; }) {}; # Load our JSON configuration for later use. cfg = pkgs.lib.trivial.importJSON ./grid.config.json; in { network = { # Make all of the hosts in this network use the nixpkgs we pinned above. inherit pkgs; # This is just for human consumption as far as I can tell. description = "PrivateStorage.io Staging Grid"; }; # Here are the hosts that are in this morph network. This is sort of like a # server manifest. We try to keep as many of the specific details as # possible out of *this* file so that this file only grows as server count # grows. If it grows too much, we can load servers by listing contents of a # directory or reading from another JSON file or some such. For now, I'm # just manually maintaining these entries. # # The name on the left of the `=` is mostly irrelevant but it does provide a # default hostname for the server if the configuration on the right side # doesn't specify one. # # The names must be unique! "testing000" = import ./testing000.nix { publicIPv4 = "3.123.26.90"; # Pass along some of the Tahoe-LAFS configuration. If we have much more # configuration than this we may want to keep it bundled up in one value # instead of pulling individual values out to pass along. inherit (cfg) publicStoragePort; }; "staging001" = import ./staging001.nix { publicIPv4 = "209.95.51.251"; inherit (cfg) publicStoragePort; }; # Pass the whole grid configuration to the module and let it take what it # wants. "staging002" = import ./staging002.nix cfg; }