feat: add deploy-rs config

This commit is contained in:
Benjamin Bädorf 2023-10-03 13:50:01 +02:00
parent d205236a4c
commit 08c6cb6e81
No known key found for this signature in database
GPG key ID: 4406E80E13CD656C
3 changed files with 93 additions and 17 deletions

View file

@ -69,6 +69,7 @@
devShells.default = pkgs.mkShell {
buildInputs = [
pkgs.deploy-rs
pkgs.nixpkgs-fmt
pkgs.agenix
pkgs.ssh-to-age
@ -141,19 +142,26 @@
];
};
deploy.nodes = {
droppie.profiles.system = {
hostname = "backup.b12f.io";
sshUser = "yule";
path = inputs.deploy-rs.lib.x86_64-linux.activate.nixos self.nixosConfigurations.droppie;
deploy.nodes = self.b12f.lib.deploy.mkDeployNodes self.nixosConfigurations {
chocolatebar = {
sshUser = "b12f";
};
pie.profiles.system = {
biolimo = {
sshUser = "b12f";
};
droppie = {
hostname = "backup.b12f.io";
sshUser = "yule";
};
pie = {
hostname = "pie.local";
sshUser = "yule";
};
maoam.profiles.system = {
maoam = {
sshUser = "b12f";
};
};

View file

@ -1,10 +1,16 @@
{lib}:
lib.makeExtensible (self: let
callLibs = file: import file {lib = self;};
in rec {
## Define your own library functions here!
#id = x: x;
## Or in files, containing functions that take {lib}
#foo = callLibs ./foo.nix;
## In configs, they can be used under "lib.our"
})
{ lib, inputs, ... }: {
# Configuration common to all Linux systems
flake = {
b12f.lib = let
callLibs = file: import file {inherit lib;};
in rec {
## Define your own library functions here!
#id = x: x;
## Or in files, containing functions that take {lib}
#foo = callLibs ./foo.nix;
## In configs, they can be used under "lib.our"
deploy = import ./deploy.nix { inherit inputs lib; };
};
};
}

62
lib/deploy.nix Normal file
View file

@ -0,0 +1,62 @@
/*
* The contents of this file are adapted from digga
* https://github.com/divnix/digga
*
* Licensed under the MIT license
*/
{ lib, inputs }: let
getFqdn = c: let
net = c.config.networking;
fqdn =
if (net ? domain) && (net.domain != null)
then "${net.hostName}.${net.domain}"
else net.hostName;
in
fqdn;
in {
mkDeployNodes = systemConfigurations: extraConfig:
/*
*
Synopsis: mkNodes _systemConfigurations_ _extraConfig_
Generate the `nodes` attribute expected by deploy-rs
where _systemConfigurations_ are `nodes`.
_systemConfigurations_ should take the form of a flake's
_nixosConfigurations_. Note that deploy-rs does not currently support
deploying to darwin hosts.
_extraConfig_, if specified, will be merged into each of the
nodes' configurations.
Example _systemConfigurations_ input:
```
{
hostname-1 = {
fastConnection = true;
sshOpts = [ "-p" "25" ];
};
hostname-2 = {
sshOpts = [ "-p" "19999" ];
sshUser = "root";
};
}
```
*
*/
lib.recursiveUpdate
(lib.mapAttrs
(
_: c: {
hostname = getFqdn c;
profiles.system = {
user = "root";
path = inputs.deploy-rs.lib.${c.pkgs.stdenv.hostPlatform.system}.activate.nixos c;
};
}
)
systemConfigurations)
extraConfig;
}