add remote deploy scripts

This commit is contained in:
Tassilo - 2022-05-14 20:47:17 +02:00
parent be6312b84f
commit fef006fbf3
Signed by: revol-xut
GPG Key ID: 4F56FF7759627D07
3 changed files with 121 additions and 36 deletions

View File

@ -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"

View File

@ -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 {

38
pkgs/deployment.nix Normal file
View File

@ -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;
#})