feat(deploy-rs): initial

Automatic `deploy-rs` node configs for `nixos` configuration using a local `deploy.nix` file
TODO: pass arguments to `deploy.nix`
TODO: extract `${system}` from `nixosConfigurations`
This commit is contained in:
reo101 2023-07-29 18:12:22 +03:00
parent 89d280b7af
commit 2fea5ded7b
Signed by: reo101
GPG key ID: 675AA7EF13964ACB
3 changed files with 148 additions and 50 deletions

132
flake.lock generated
View file

@ -50,6 +50,28 @@
"url": "https://gist.github.com/antlilja/8372900fcc09e38d7b0b6bbaddad3904/archive/6c3321e0969ff2463f8335da5601986cf2108690.tar.gz" "url": "https://gist.github.com/antlilja/8372900fcc09e38d7b0b6bbaddad3904/archive/6c3321e0969ff2463f8335da5601986cf2108690.tar.gz"
} }
}, },
"deploy-rs": {
"inputs": {
"flake-compat": "flake-compat",
"nixpkgs": [
"nixpkgs"
],
"utils": "utils"
},
"locked": {
"lastModified": 1686747123,
"narHash": "sha256-XUQK9kwHpTeilHoad7L4LjMCCyY13Oq383CoFADecRE=",
"owner": "serokell",
"repo": "deploy-rs",
"rev": "724463b5a94daa810abfc64a4f87faef4e00f984",
"type": "github"
},
"original": {
"owner": "serokell",
"repo": "deploy-rs",
"type": "github"
}
},
"diffz": { "diffz": {
"flake": false, "flake": false,
"locked": { "locked": {
@ -63,6 +85,22 @@
} }
}, },
"flake-compat": { "flake-compat": {
"flake": false,
"locked": {
"lastModified": 1668681692,
"narHash": "sha256-Ht91NGdewz8IQLtWZ9LCeNXMSXHUss+9COoqu6JLmXU=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "009399224d5e398d03b22badca40a37ac85412a1",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"flake-compat_2": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1673956053, "lastModified": 1673956053,
@ -78,7 +116,7 @@
"type": "github" "type": "github"
} }
}, },
"flake-compat_2": { "flake-compat_3": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1673956053, "lastModified": 1673956053,
@ -245,11 +283,11 @@
}, },
"hardware": { "hardware": {
"locked": { "locked": {
"lastModified": 1689320556, "lastModified": 1690200740,
"narHash": "sha256-vODUkZLWFVCvo1KPK3dC2CbXjxa9antEn5ozwlcTr48=", "narHash": "sha256-aRkEXGmCbAGcvDcdh/HB3YN+EvoPoxmJMOaqRZmf6vM=",
"owner": "nixos", "owner": "nixos",
"repo": "nixos-hardware", "repo": "nixos-hardware",
"rev": "d4ea64f2063820120c05f6ba93ee02e6d4671d6b", "rev": "ba9650b14e83b365fb9e731f7d7c803f22d2aecf",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -323,11 +361,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1690084763, "lastModified": 1690629157,
"narHash": "sha256-Nw680m/pyVoosSgXZW415Z657mfVM2BxaxDPjEk48Z0=", "narHash": "sha256-hsZC4tPH4Ab/ynuswApNFzshbfG79Ctbrc4Qa0z9sek=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "fb03fa5516d4e86059d24ab35a611ffa3a359547", "rev": "5c23226768abd3402636f4d3c65aea8450997102",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -359,11 +397,11 @@
}, },
"locked": { "locked": {
"dir": "contrib", "dir": "contrib",
"lastModified": 1690067801, "lastModified": 1690552121,
"narHash": "sha256-KBt1U+WXRRyL2uSaLxw5frQxhAB9hMTIvNUdQ4hL5nU=", "narHash": "sha256-bNeKWkhEHAGzqA/Jl76INUTwxY4EWObtRedh6FJpXdE=",
"owner": "neovim", "owner": "neovim",
"repo": "neovim", "repo": "neovim",
"rev": "a8cfdf43bc6226e32679ec59769ea3e48ca26193", "rev": "42333ea98dfcd2994ee128a3467dfe68205154cd",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -375,7 +413,7 @@
}, },
"neovim-nightly-overlay": { "neovim-nightly-overlay": {
"inputs": { "inputs": {
"flake-compat": "flake-compat", "flake-compat": "flake-compat_2",
"flake-parts": "flake-parts", "flake-parts": "flake-parts",
"hercules-ci-effects": "hercules-ci-effects", "hercules-ci-effects": "hercules-ci-effects",
"neovim-flake": "neovim-flake", "neovim-flake": "neovim-flake",
@ -384,11 +422,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1690070762, "lastModified": 1690589171,
"narHash": "sha256-Cor1qic27mQkgGHoaJMWTlaueKmUZxXkboBVAi1Ikw8=", "narHash": "sha256-a43o9NdzCi8mAlSeeWzMbidGsRcC6pRAlUbmnvyYsdk=",
"owner": "nix-community", "owner": "nix-community",
"repo": "neovim-nightly-overlay", "repo": "neovim-nightly-overlay",
"rev": "33dc18d6278f81ac272b28f5d1277bd9bc6e69b9", "rev": "89b2c502ea2f67283378d212280e2f5ae5a44035",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -423,11 +461,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1690100173, "lastModified": 1690431538,
"narHash": "sha256-v3DT7u5KlW1ZoulvFQPndbg0gVD0zKGkJmPqGsBVQ3I=", "narHash": "sha256-Uml8ivMMOFPB9fNSDcw72imGHRdJpaK12sRm2DTLLe8=",
"owner": "lnl7", "owner": "lnl7",
"repo": "nix-darwin", "repo": "nix-darwin",
"rev": "0f9058e739dbefc676dee557b4b627962268d556", "rev": "16c07487ac9bc59f58b121d13160c67befa3342e",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -473,16 +511,16 @@
"nmd": "nmd_2" "nmd": "nmd_2"
}, },
"locked": { "locked": {
"lastModified": 1670198918, "lastModified": 1688144254,
"narHash": "sha256-oNlUhAM0/a3pDdCMmBWA+CLrDAIYJqAAMyrDp8fNSM4=", "narHash": "sha256-8KL1l/7eP2Zm1aJjdVaSOk0W5kTnJo9kcgW03gqWuiI=",
"owner": "t184256", "owner": "t184256",
"repo": "nix-on-droid", "repo": "nix-on-droid",
"rev": "b00cb5e7e2a47d85a019119069b153cda4002d0a", "rev": "2301e01d48c90b60751005317de7a84a51a87eb6",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "t184256", "owner": "t184256",
"ref": "release-22.11", "ref": "release-23.05",
"repo": "nix-on-droid", "repo": "nix-on-droid",
"type": "github" "type": "github"
} }
@ -505,17 +543,17 @@
}, },
"nixpkgs-for-bootstrap": { "nixpkgs-for-bootstrap": {
"locked": { "locked": {
"lastModified": 1669834992, "lastModified": 1686921029,
"narHash": "sha256-YnhZGHgb4C3Q7DSGisO/stc50jFb9F/MzHeKS4giotg=", "narHash": "sha256-J1bX9plPCFhTSh6E3TWn9XSxggBh/zDD4xigyaIQBy8=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "596a8e828c5dfa504f91918d0fa4152db3ab5502", "rev": "c7ff1b9b95620ce8728c0d7bd501c458e6da9e04",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "596a8e828c5dfa504f91918d0fa4152db3ab5502", "rev": "c7ff1b9b95620ce8728c0d7bd501c458e6da9e04",
"type": "github" "type": "github"
} }
}, },
@ -554,11 +592,11 @@
}, },
"nixpkgs_2": { "nixpkgs_2": {
"locked": { "locked": {
"lastModified": 1690031011, "lastModified": 1690548937,
"narHash": "sha256-kzK0P4Smt7CL53YCdZCBbt9uBFFhE0iNvCki20etAf4=", "narHash": "sha256-x3ZOPGLvtC0/+iFAg9Kvqm/8hTAIkGjc634SqtgaXTA=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "12303c652b881435065a98729eb7278313041e49", "rev": "2a9d660ff0f7ffde9d73be328ee6e6f10ef66b28",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -618,11 +656,11 @@
}, },
"nur": { "nur": {
"locked": { "locked": {
"lastModified": 1690119932, "lastModified": 1690641547,
"narHash": "sha256-pNb+6ifwxnM3ySI34jLj7FMS94n02WWFZdHuribIfUo=", "narHash": "sha256-JQ25V32fZY24myfsM381077BqNf2f+EtbjPMkMIFHjA=",
"owner": "nix-community", "owner": "nix-community",
"repo": "NUR", "repo": "NUR",
"rev": "261e1e0dbadd9113a71c8dd70e3ab04214cf59c8", "rev": "511f665c5202be46bf0de8075852b5b6173ad7bc",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -633,6 +671,7 @@
}, },
"root": { "root": {
"inputs": { "inputs": {
"deploy-rs": "deploy-rs",
"hardware": "hardware", "hardware": "hardware",
"home-manager": "home-manager", "home-manager": "home-manager",
"neovim-nightly-overlay": "neovim-nightly-overlay", "neovim-nightly-overlay": "neovim-nightly-overlay",
@ -677,6 +716,21 @@
} }
}, },
"utils": { "utils": {
"locked": {
"lastModified": 1667395993,
"narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"utils_2": {
"locked": { "locked": {
"lastModified": 1652776076, "lastModified": 1652776076,
"narHash": "sha256-gzTw/v1vj4dOVbpBSJX4J0DwUR6LIyXo7/SuuTJp1kM=", "narHash": "sha256-gzTw/v1vj4dOVbpBSJX4J0DwUR6LIyXo7/SuuTJp1kM=",
@ -697,7 +751,7 @@
"nixpkgs": [ "nixpkgs": [
"nixpkgs" "nixpkgs"
], ],
"utils": "utils" "utils": "utils_2"
}, },
"locked": { "locked": {
"lastModified": 1683104317, "lastModified": 1683104317,
@ -715,18 +769,18 @@
}, },
"zig-overlay": { "zig-overlay": {
"inputs": { "inputs": {
"flake-compat": "flake-compat_2", "flake-compat": "flake-compat_3",
"flake-utils": "flake-utils_2", "flake-utils": "flake-utils_2",
"nixpkgs": [ "nixpkgs": [
"nixpkgs" "nixpkgs"
] ]
}, },
"locked": { "locked": {
"lastModified": 1690114050, "lastModified": 1690632457,
"narHash": "sha256-dxVJqVgxQO2ryI92OHhWFVmUaPw+JpJ1tkDDlwZKec4=", "narHash": "sha256-LahcuCpcnxY2cVar6QwWK5qHss59eItb/jyqyViGPFQ=",
"owner": "mitchellh", "owner": "mitchellh",
"repo": "zig-overlay", "repo": "zig-overlay",
"rev": "b6ce76ff966c5c5ca62ba6d961ef9dedace1ce96", "rev": "f75f2f3c2241e6e861d9dcc5b0c23a1db2677084",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -750,11 +804,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1689968184, "lastModified": 1690622694,
"narHash": "sha256-6lzIwNl7GTuPteqqi3F870G2QEMySPhV4ulD4jqg6BI=", "narHash": "sha256-zr22JImuh4KuQVp8cvLuE2UDZMN3mRKutifBbKLLvXE=",
"owner": "zigtools", "owner": "zigtools",
"repo": "zls", "repo": "zls",
"rev": "b5bf6c1280fc222ff8a0bf74df24e714d0df694f", "rev": "89e9c603cb23b4827915af95c52624e12ab9429f",
"type": "github" "type": "github"
}, },
"original": { "original": {

View file

@ -27,6 +27,11 @@
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
deploy-rs = {
url = "github:serokell/deploy-rs";
inputs.nixpkgs.follows = "nixpkgs";
};
# Nix User Repository # Nix User Repository
nur = { nur = {
url = "github:nix-community/NUR"; url = "github:nix-community/NUR";
@ -68,6 +73,7 @@
, nix-on-droid , nix-on-droid
, nix-darwin , nix-darwin
, home-manager , home-manager
, deploy-rs
, nur , nur
, hardware , hardware
, nix-colors , nix-colors
@ -132,5 +138,9 @@
nixOnDroidConfigurations = util.autoNixOnDroidConfigurations; nixOnDroidConfigurations = util.autoNixOnDroidConfigurations;
darwinConfigurations = util.autoDarwinConfigurations; darwinConfigurations = util.autoDarwinConfigurations;
homeConfigurations = util.autoHomeConfigurations; homeConfigurations = util.autoHomeConfigurations;
# Deploy.rs nodes
deploy.nodes = util.deploy.autoNodes;
checks = util.autoChecks;
}; };
} }

View file

@ -61,7 +61,7 @@ rec {
in in
if and [ if and [
(type == "directory") (type == "directory")
(hasFiles ["default.nix"] (builtins.readDir moduleDir)) (hasFiles [ "default.nix" ] (builtins.readDir moduleDir))
] then ] then
# Classic module in a directory # Classic module in a directory
lib.nameValuePair lib.nameValuePair
@ -91,8 +91,8 @@ rec {
(builtins.isFunction (builtins.isFunction
module) module)
(eq (eq
(lib.pipe module [builtins.functionArgs builtins.attrNames]) (lib.pipe module [ builtins.functionArgs builtins.attrNames ])
(lib.pipe passthru [builtins.attrNames])) (lib.pipe passthru [ builtins.attrNames ]))
] ]
then module passthru then module passthru
else module)) else module))
@ -315,4 +315,38 @@ rec {
system system
host) host)
homeManagerMachines; homeManagerMachines;
# Deploy.rs nodes
deploy.autoNodes =
let
# TODO: extract `${system}` from `nixosConfigurations`
system = "x86_64-linux";
deploy-rs-config = system: host:
../machines/nixos/${system}/${host}/deploy.nix;
in
lib.pipe
outputs.nixosConfigurations
[
(lib.filterAttrs
(host: config:
builtins.pathExists (deploy-rs-config system host)))
(lib.mapAttrs
(host: config:
let
nodeConfig = import (deploy-rs-config system host);
system = config.pkgs.system;
in
{
inherit (nodeConfig)
hostname;
profiles.system = {
path = inputs.deploy-rs.lib.${system}.activate.nixos config;
inherit (nodeConfig)
sshUser user sshOpts
magicRollback remoteBuild;
};
}))
];
autoChecks = builtins.mapAttrs (system: deployLib: deployLib.deployChecks inputs.self.deploy) inputs.deploy-rs.lib;
} }