diff --git a/flake.nix b/flake.nix index a70e59d..b0a3b9c 100644 --- a/flake.nix +++ b/flake.nix @@ -126,37 +126,9 @@ # list of accending system numbers id_list = [ 0 1 2 3 4 ]; - # list of nixos systems - list_of_systems = builtins.map generate_system id_list; + # attribute set of all traffic stop boxes - stop_boxes = nixpkgs.lib.foldr (x: y: nixpkgs.lib.mergeAttrs x y) { } list_of_systems; - - installScript = (target: (pkgs.writeScriptBin "deploy" '' - #!${pkgs.runtimeShell} - ssh root@10.13.37.${toString (target + 100)} "ps cax | grep \"nixos-rebuild\" > /dev/null" - if [ $? -eq 0 ] - then - echo "Process is running." - exit - else - echo "Process is not running." - nix copy --to ssh://root@10.13.37.${toString (target + 100)} ${self} - ssh root@10.13.37.${toString (target + 100)} -- nixos-rebuild switch --flake ${self} -L - fi - '')); - - # concatanes commands together - deployBoxes = (systems: lib.strings.concatStringsSep " " - (builtins.map (system: "${(installScript system)}/bin/deploy") systems)); - - deployAllScript = (pkgs.writeScriptBin "deploy-all" ( - '' - #!${pkgs.runtimeShell} -ex - ${pkgs.parallel}/bin/parallel --will-cite -j10 ::: ${deployBoxes id_list} || echo "Some deployment failed" - '' - )); - - individualScripts = lib.foldl (x: y: lib.mergeAttrs x y) { } (builtins.map (number: { "deploy-box-${toString number}" = (installScript number); }) id_list); + stop_boxes = nixpkgs.lib.foldl (x: y: nixpkgs.lib.mergeAttrs x (generate_system y)) { } id_list; packages = { traffic-stop-box = self.nixosConfigurations.traffic-stop-box-0.config.system.build.vm; @@ -164,8 +136,7 @@ mobile-box-vm = self.nixosConfigurations.mobile-box.config.system.build.vm; mobile-box-disk = self.nixosConfigurations.mobile-box.config.system.build.diskImage; staging-microvm = self.nixosConfigurations.staging-data-hoarder.config.microvm.declaredRunner; - deploy-all = deployAllScript; - } // individualScripts; + } // (import ./pkgs/deployment.nix { inherit self pkgs; systems = stop_boxes; }); in { defaultPackage."x86_64-linux" = self.nixosConfigurations.traffic-stop-box-0.config.system.build.vm; @@ -224,5 +195,3 @@ }; }; } - - diff --git a/pkgs/deployment.nix b/pkgs/deployment.nix index 2cc785e..b728caa 100644 --- a/pkgs/deployment.nix +++ b/pkgs/deployment.nix @@ -1,39 +1,36 @@ -{ self, pkgs, lib, boxes }: +{ self, pkgs, systems }: let - # command which generates the update script for that specific machine - installScript = (target: (pkgs.writeScript "deploy" '' - #!${pkgs.runtimeShell} - ssh root@10.13.37.${toString (target + 100)} "ps cax | grep \"nixos-rebuild\" > /dev/null" - if [ $? -eq 0 ] - then - echo "Process is running." - exit - else - echo "Process is not running." - nix copy --to ssh://root@10.13.37.${toString (target + 100)} ${self} - ssh root@10.13.37.${toString (target + 100)} -- nixos-rebuild switch --flake ${self}#traffic-stop-box-${toString target} - fi - '')); - # concatanes commands together - deployBoxes = (systems: lib.strings.concatStringsSep " " - (builtins.map (system: "${(installScript system)}") systems)); + installScript = (system: + let ip = "10.13.37.${toString (system.config.dvb-dump.systemNumber + 100)}"; + in (pkgs.writeScriptBin "deploy" '' + #!${pkgs.runtimeShell} + ssh root@${ip} "ps cax | grep \"nixos-rebuild\" > /dev/null" + if [ $? -eq 0 ] + then + echo "\e[1;31m [!] nixos-rebuild is already running on ${ip}" + exit 1 + else + nix copy --to ssh://root@${ip} ${self} + ssh root@${ip} -- nixos-rebuild switch --flake ${self} -L + fi + '')); - deployAllScript = (pkgs.writeScript "deploy-all" ( - '' - #!${pkgs.runtimeShell} -ex - ${pkgs.parallel}/bin/parallel --citation - ${pkgs.parallel}/bin/parallel -j10 ::: ${deployBoxes boxes} || echo "Some deployment failed" - '' - )); + installScripts = pkgs.lib.mapAttrs' (name: system: + pkgs.lib.attrsets.nameValuePair ("deploy-" + name) (installScript system)) + systems; - individualScripts = lib.foldl (x: y: lib.mergeAttrs x y) { } (builtins.map (number: { "deploy-box-${toString number}" = (installScript number); }) boxes); + deployAllExecutablePathsConcatted = + pkgs.lib.strings.concatMapStringsSep " " (path: "${path}/bin/deploy") + (builtins.attrValues installScripts); -in -({ - deploy-all = deployAllScript; -}) #individualScripts + deployAllScript = (name: + pkgs.writeScriptBin name ('' + #!${pkgs.runtimeShell} -ex + ${pkgs.parallel}/bin/parallel --will-cite -j10 ::: ${deployAllExecutablePathsConcatted} || echo "Some deployment failed" + '')); -#in (individualScripts // { -# deploy-all = deployAllScript; -#}) +in { + deploy-all = deployAllScript "deploy-all"; + nuke-all = deployAllScript "nuke-all"; +} // installScripts