nixos-servers/scripts/default.nix

98 lines
3.1 KiB
Nix
Raw Normal View History

{ self, nixpkgs, flake-utils, ... }: flake-utils.lib.eachDefaultSystem (system:
2024-03-27 19:10:14 +00:00
let
pkgs = nixpkgs.legacyPackages.${system};
2024-05-19 12:05:20 +00:00
createScript = { name, runtimeInputs, scriptPath, extraWrapperFlags ? "", ... }:
2024-03-27 19:10:14 +00:00
let
script = (pkgs.writeScriptBin name (builtins.readFile scriptPath)).overrideAttrs (old: {
2024-03-27 19:10:14 +00:00
buildCommand = "${old.buildCommand}\n patchShebangs $out";
});
in
pkgs.symlinkJoin {
2024-03-27 19:10:14 +00:00
inherit name;
paths = [ script ] ++ runtimeInputs;
buildInputs = [ pkgs.makeWrapper ];
2024-05-19 12:05:20 +00:00
postBuild = "wrapProgram $out/bin/${name} --set PATH $out/bin ${extraWrapperFlags}";
2024-03-27 19:10:14 +00:00
};
in
{
2024-05-19 12:05:20 +00:00
packages.bootstrap = createScript {
name = "bootstrap";
2024-06-15 20:27:07 +00:00
runtimeInputs = with pkgs; [ sops coreutils nixos-anywhere ];
2024-05-19 12:05:20 +00:00
scriptPath = ./bootstrap.sh;
};
packages.gen-k3s-cert = createScript {
name = "create-k3s-cert";
runtimeInputs = with pkgs; [ openssl coreutils openssh yq ];
scriptPath = ./gen-k3s-cert.sh;
};
2024-06-30 12:35:47 +00:00
packages.prefetch-container-images =
let
imagesJSON = builtins.toFile "images.json" (builtins.toJSON self.globals.images);
2024-06-30 12:35:47 +00:00
in
2024-08-29 04:53:05 +00:00
pkgs.writers.writePython3Bin "prefetch-container-images.py"
2024-06-30 12:35:47 +00:00
{ } ''
import json
import subprocess
import tempfile
import sys
from collections import defaultdict
prefetch_docker_cmd = "${pkgs.lib.getExe pkgs.nix-prefetch-docker}" # noqa: E501
nix_cmd = "${pkgs.lib.getExe pkgs.nix}" # noqa: E501
images_file_name = "${imagesJSON}"
results = defaultdict(lambda: defaultdict(dict))
with open(images_file_name, 'r') as file:
data = json.load(file)
2024-08-29 04:53:05 +00:00
for image_name, image_ref in data.items():
[name, tag] = image_ref.split(":", maxsplit=1)
print(f"Prefetching image {image_ref}", file=sys.stderr)
2024-06-30 12:35:47 +00:00
2024-08-29 04:53:05 +00:00
digest = ""
if "@" in tag:
[tag, digest] = tag.split("@", maxsplit=1)
2024-06-30 12:35:47 +00:00
prefetch_args = [
prefetch_docker_cmd,
"--os", "linux",
"--arch", "amd64",
"--image-name", name,
"--image-tag", tag,
"--json",
"--quiet"
]
2024-08-29 04:53:05 +00:00
if digest:
prefetch_args.extend(["--image-digest", digest])
result = subprocess.run(prefetch_args,
check=True,
capture_output=True,
text=True)
2024-06-30 12:35:47 +00:00
prefetch_data = json.loads(result.stdout)
results[image_name] = prefetch_data
2024-06-30 12:35:47 +00:00
with tempfile.NamedTemporaryFile(mode='w+', suffix='.json') as temp_file:
json.dump(results, temp_file, indent=4)
temp_file.flush()
to_nix_args = [
nix_cmd,
"eval",
"--impure",
"--expr", f'builtins.fromJSON (builtins.readFile {temp_file.name})'
]
result = subprocess.run(to_nix_args,
check=True,
capture_output=True,
text=True)
print(result.stdout)
'';
2024-03-27 19:10:14 +00:00
})