Refactor deployment (#8)

* move deployment scripts

* refactor deployment
This commit is contained in:
Markus Schmidl 2022-05-30 20:50:18 +02:00 committed by GitHub
parent 6fb9686b7a
commit 88ef87505c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 33 additions and 67 deletions

View File

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

View File

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