From fef006fbf3cbd6908449dea242eb8efd304fd2ba Mon Sep 17 00:00:00 2001 From: revol-xut Date: Sat, 14 May 2022 20:47:17 +0200 Subject: [PATCH] add remote deploy scripts --- flake.lock | 47 +++++++++++++++++++++-------- flake.nix | 72 ++++++++++++++++++++++++++++++--------------- pkgs/deployment.nix | 38 ++++++++++++++++++++++++ 3 files changed, 121 insertions(+), 36 deletions(-) create mode 100644 pkgs/deployment.nix diff --git a/flake.lock b/flake.lock index 475fa3e..2b27958 100644 --- a/flake.lock +++ b/flake.lock @@ -30,7 +30,7 @@ "decode-server": { "inputs": { "naersk": "naersk", - "nixpkgs": "nixpkgs", + "nixpkgs": "nixpkgs_2", "utils": "utils_2" }, "locked": { @@ -93,10 +93,7 @@ }, "naersk": { "inputs": { - "nixpkgs": [ - "decode-server", - "nixpkgs" - ] + "nixpkgs": "nixpkgs" }, "locked": { "lastModified": 1651574473, @@ -114,9 +111,7 @@ }, "naersk_2": { "inputs": { - "nixpkgs": [ - "nixpkgs" - ] + "nixpkgs": "nixpkgs_3" }, "locked": { "lastModified": 1651574473, @@ -133,6 +128,20 @@ } }, "nixpkgs": { + "locked": { + "lastModified": 1652483617, + "narHash": "sha256-Jxyn3uXFr5LdZNNiippI/obtLXAVBM18uVfiKVP4j9Q=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "ed014c27f4d0ca772fb57d3b8985b772b0503bbd", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "type": "indirect" + } + }, + "nixpkgs_2": { "locked": { "lastModified": 1651571855, "narHash": "sha256-KZie6c2J2DUPLjG2PkYSwGLvD6RygA3TxZSPQpctbNI=", @@ -148,7 +157,21 @@ "type": "github" } }, - "nixpkgs_2": { + "nixpkgs_3": { + "locked": { + "lastModified": 1652483617, + "narHash": "sha256-Jxyn3uXFr5LdZNNiippI/obtLXAVBM18uVfiKVP4j9Q=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "ed014c27f4d0ca772fb57d3b8985b772b0503bbd", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "type": "indirect" + } + }, + "nixpkgs_4": { "locked": { "lastModified": 1652442528, "narHash": "sha256-ctD9BdjN7e6cBipm8k9xt+vgwlRApkvuJLSNdaVrphE=", @@ -164,7 +187,7 @@ "type": "github" } }, - "nixpkgs_3": { + "nixpkgs_5": { "locked": { "lastModified": 1651571855, "narHash": "sha256-KZie6c2J2DUPLjG2PkYSwGLvD6RygA3TxZSPQpctbNI=", @@ -182,7 +205,7 @@ }, "radio-conf": { "inputs": { - "nixpkgs": "nixpkgs_3", + "nixpkgs": "nixpkgs_5", "utils": "utils_4" }, "locked": { @@ -206,7 +229,7 @@ "docs": "docs", "dvb-api": "dvb-api", "naersk": "naersk_2", - "nixpkgs": "nixpkgs_2", + "nixpkgs": "nixpkgs_4", "radio-conf": "radio-conf", "stops": "stops", "windshield": "windshield" diff --git a/flake.nix b/flake.nix index 4124589..a03fbf7 100644 --- a/flake.nix +++ b/flake.nix @@ -4,7 +4,7 @@ naersk = { url = github:nix-community/naersk; - inputs.nixpkgs.follows = "nixpkgs"; + #inputs.nixpkgs.follows = "nixpkgs"; }; radio-conf = { @@ -20,7 +20,7 @@ decode-server = { url = github:dump-dvb/decode-server; - inputs.stops.follows = "stops"; + #inputs.stops.follows = "stops"; }; dvb-api = { @@ -50,17 +50,6 @@ pkgs = nixpkgs.legacyPackages."x86_64-linux"; lib = pkgs.lib; - # command which generates the update script for that specific machine - installScript = (target: (pkgs.writeScript "deploy" '' - #!${pkgs.runtimeShell} -ex - 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} - '')); - - # concatanes commands together - deployBoxes = (systems: lib.strings.concatStringsSep " " - (builtins.map (system: "${(installScript system)}") systems)); - # function that generates a system with the given number generate_system = (number: { @@ -88,27 +77,62 @@ numberOfSystems = 10; # list of accending system numbers #id_list = ((num: if num <= 0 then [ num ] else [ num ] ++ (id_list (num - 1))) (numberOfSystems - 1)); - id_list = [ 0 1 2 ]; + 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; - deployScript = (pkgs.writeScript "deploy-all" ( + boxes = id_list; + 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}#traffic-stop-box-${toString target} --option substituters "https://dump-dvb.cachix.org" --option substituters "https://cache.nixos.org" + 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 --citation - ${pkgs.parallel}/bin/parallel -j10 ::: ${deployBoxes id_list} || echo "Some deployment failed" - '' + #!${pkgs.runtimeShell} -ex + ${pkgs.parallel}/bin/parallel --citation + ${pkgs.parallel}/bin/parallel -j10 ::: ${deployBoxes boxes} || echo "Some deployment failed" + '' )); + + individualScripts = lib.foldl (x: y: lib.mergeAttrs x y) {} (builtins.map (number: {"deploy-box-${toString number}" = (installScript number);}) boxes); + + + #deployScripts = pkgs.callPackage ./pkgs/deployment.nix { + # boxes = id_list; + # self = self; + #}; + + packages = ({ + traffic-stop-box = self.nixosConfigurations.traffic-stop-box-0.config.system.build.vm; + data-hoarder = self.nixosConfigurations.data-hoarder.config.system.build.vm; + mobile-box-vm = self.nixosConfigurations.mobile-box.config.system.build.vm; + mobile-box-iso = self.nixosConfigurations.mobile-box.config.system.build.isoImage; + } // { + deploy-all = deployAllScript; + } // individualScripts); + # deployScripts); + #"x86_64-linux" = ({ + #} // deployScripts );}); in { defaultPackage."x86_64-linux" = self.nixosConfigurations.traffic-stop-box-0.config.system.build.vm; - packages."x86_64-linux".traffic-stop-box = self.nixosConfigurations.traffic-stop-box-0.config.system.build.vm; - packages."x86_64-linux".data-hoarder = self.nixosConfigurations.data-hoarder.config.system.build.vm; - packages."x86_64-linux".mobile-box-vm = self.nixosConfigurations.mobile-box.config.system.build.vm; - packages."x86_64-linux".mobile-box-iso = self.nixosConfigurations.mobile-box.config.system.build.isoImage; - packages."x86_64-linux".deploy-all = deployScript; + packages."x86_64-linux" = packages; nixosConfigurations = stop_boxes // { "mobile-box" = nixpkgs.lib.nixosSystem { diff --git a/pkgs/deployment.nix b/pkgs/deployment.nix new file mode 100644 index 0000000..dfc73d2 --- /dev/null +++ b/pkgs/deployment.nix @@ -0,0 +1,38 @@ +{self, pkgs, lib, boxes}: +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)); + + deployAllScript = (pkgs.writeScript "deploy-all" ( + '' + #!${pkgs.runtimeShell} -ex + ${pkgs.parallel}/bin/parallel --citation + ${pkgs.parallel}/bin/parallel -j10 ::: ${deployBoxes boxes} || echo "Some deployment failed" + '' + )); + + individualScripts = lib.foldl (x: y: lib.mergeAttrs x y) {} (builtins.map (number: {"deploy-box-${toString number}" = (installScript number);}) boxes); + +in ({ + deploy-all = deployAllScript; +}) #individualScripts + +#in (individualScripts // { +# deploy-all = deployAllScript; +#})