# Top-level file aggregating all machines managed from hscloud.
#
# This allows to have a common attrset of machines that can be deployed
# in the same way.
#
# Currently building/deployment is still done in a half-assed way:
#
#    machine=edge01.waw.bgp.wtf
#    d=$(nix-build -A 'ops.machines."'$machine'"'.toplevel)
#
# To then deploy derivation $d on $machine:
#
#    nix-copy-closure --to root@$machine $d
#    ssh root@$machine $d/bin/switch-to-configuration
#
# TODO(q3k): merge this with //cluster/clustercfg - this should be unified!

{ hscloud, pkgs, ... }:

let
  # Stopgap measure to import //cluster/nix machine definitions into new
  # //ops/machines infrastructure.
  # TODO(q3k): inject defs-cluster-k0.nix / defs-machines.nix content via
  # nixos options instead of having module definitions loading it themselves,
  # deduplicate list of machines below with defs-machines.nix somehow.
  mkClusterMachine = name: pkgs.nixos ({ config, pkgs, ... }: {
    # The hostname is used by //cluster/nix machinery to load the appropriate
    # config from defs-machines into defs-cluster-k0.
    networking.hostName = name;
    imports = [
      ../cluster/nix/modules/base.nix
      ../cluster/nix/modules/kubernetes.nix
    ];
  });

  mkMachine = pkgs: paths: pkgs.nixos ({ config, pkgs, ... }: {
    imports = paths;
  });

in {
  "bc01n01.hswaw.net" = mkClusterMachine "bc01n01";
  "bc01n02.hswaw.net" = mkClusterMachine "bc01n02";
  "bc01n03.hswaw.net" = mkClusterMachine "bc01n03";
  "dcr01s22.hswaw.net" = mkClusterMachine "dcr01s22";
  "dcr01s24.hswaw.net" = mkClusterMachine "dcr01s24";

  # edge01 still lives on an old nixpkgs checkout.
  # TODO(b/3): unpin and deploy.
  "edge01.waw.bgp.wtf" = mkMachine (
    import (pkgs.fetchFromGitHub {
      owner = "nixos";
      repo = "nixpkgs-channels";
      rev = "c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38";
      sha256 = "1ak7jqx94fjhc68xh1lh35kh3w3ndbadprrb762qgvcfb8351x8v";
    }) {}
  ) [
    ../bgpwtf/machines/edge01.waw.bgp.wtf.nix
    ../bgpwtf/machines/edge01.waw.bgp.wtf-hardware.nix
  ];
}
