From f88ca6e646a36a5da1d6f7401260cd77cc0c4635 Mon Sep 17 00:00:00 2001 From: Kiara Grouwstra Date: Wed, 28 May 2025 21:12:51 +0200 Subject: [PATCH] add proxmox repro test --- .envrc | 6 ++ .forgejo/workflows/ci.yaml | 6 ++ deployment/check/proxmox/flake-part.nix | 40 ++++++++++++ deployment/check/proxmox/myvm.nix | 11 ++++ deployment/check/proxmox/proxmoxTest.nix | 83 ++++++++++++++++++++++++ deployment/flake-part.nix | 1 + nixmoxer.conf | 4 ++ npins/sources.json | 71 ++++++++++++++++++++ 8 files changed, 222 insertions(+) create mode 100644 deployment/check/proxmox/flake-part.nix create mode 100644 deployment/check/proxmox/myvm.nix create mode 100644 deployment/check/proxmox/proxmoxTest.nix create mode 100644 nixmoxer.conf diff --git a/.envrc b/.envrc index c6aca5a1..d5a1633e 100644 --- a/.envrc +++ b/.envrc @@ -8,3 +8,9 @@ else echo 'while direnv evaluated .envrc, could not find the command "lorri" [https://github.com/nix-community/lorri]' use_nix fi + +# TODO: how to make this work for a test? +export NIX_CONFIG=" +extra-substituters = https://cache.saumon.network/proxmox-nixos +trusted-public-keys = proxmox-nixos:D9RYSWpQQC/msZUWphOY2I5RLH5Dd6yQcaHIuug7dWM= +" diff --git a/.forgejo/workflows/ci.yaml b/.forgejo/workflows/ci.yaml index 18925ab8..0b452e0c 100644 --- a/.forgejo/workflows/ci.yaml +++ b/.forgejo/workflows/ci.yaml @@ -27,6 +27,12 @@ jobs: - uses: actions/checkout@v4 - run: cd panel && nix-build -A tests + check-proxmox-basic: + runs-on: native + steps: + - uses: actions/checkout@v4 + - run: nix build .#checks.x86_64-linux.proxmox-basic -L + check-deployment-basic: runs-on: native steps: diff --git a/deployment/check/proxmox/flake-part.nix b/deployment/check/proxmox/flake-part.nix new file mode 100644 index 00000000..b22b42f8 --- /dev/null +++ b/deployment/check/proxmox/flake-part.nix @@ -0,0 +1,40 @@ +{ + perSystem = + { + system, + ... + }: + let + sources = import ../../../npins; + pkgs = import sources.nixpkgs-stable { + inherit system; + overlays = [ overlay ]; + }; + overlay = _: _: { + inherit + (import "${sources.proxmox-nixos}/pkgs" { + craneLib = pkgs.callPackage "${sources.crane}/lib" { }; + # this seems picky about the version used + inherit pkgs; + # not so picky about version for our purposes + pkgs-unstable = pkgs; + }) + proxmox-ve + pve-ha-manager + ; + }; + in + { + checks.proxmox-basic = pkgs.testers.runNixOSTest { + node.specialArgs = { + inherit + sources + pkgs + ; + }; + imports = [ + ./proxmoxTest.nix + ]; + }; + }; +} diff --git a/deployment/check/proxmox/myvm.nix b/deployment/check/proxmox/myvm.nix new file mode 100644 index 00000000..335fd3b9 --- /dev/null +++ b/deployment/check/proxmox/myvm.nix @@ -0,0 +1,11 @@ +{ + sources, + ... +}: +{ + imports = [ + "${sources.proxmox-nixos}/modules/proxmox-ve" + ]; + + # networking.hostName = "myvm"; +} diff --git a/deployment/check/proxmox/proxmoxTest.nix b/deployment/check/proxmox/proxmoxTest.nix new file mode 100644 index 00000000..b2d9ebb3 --- /dev/null +++ b/deployment/check/proxmox/proxmoxTest.nix @@ -0,0 +1,83 @@ +{ + pkgs, + ... +}: + +let + minimalIso = pkgs.fetchurl { + url = "https://releases.nixos.org/nixos/24.05/nixos-24.05.7139.bcba2fbf6963/nixos-minimal-24.05.7139.bcba2fbf6963-x86_64-linux.iso"; + hash = "sha256-plre/mIHdIgU4xWU+9xErP+L4i460ZbcKq8iy2n4HT8="; + }; +in +{ + name = "proxmox-basic"; + + nodes.mypve = { + imports = [ + ./myvm.nix + ]; + + services.proxmox-ve = { + enable = true; + ipAddress = "192.168.1.1"; + vms = { + myvm1 = { + vmid = 100; + memory = 1024; + cores = 1; + sockets = 1; + kvm = true; + scsi = [ { file = "local:16"; } ]; + cdrom = "local:iso/minimal.iso"; + }; + }; + }; + virtualisation = { + additionalPaths = [ minimalIso ]; + diskSize = 4096; + memorySize = 2048; + }; + }; + + testScript = '' + machine.start() + machine.wait_for_unit("pveproxy.service") + assert "running" in machine.succeed("pveproxy status") + + # Copy Iso + machine.succeed("mkdir -p /var/lib/vz/template/iso/") + machine.succeed("cp ${minimalIso} /var/lib/vz/template/iso/minimal.iso") + + # Declarative VM creation + machine.wait_for_unit("multi-user.target") + machine.succeed("qm stop 100 --timeout 0") + + # Seabios VM creation + machine.succeed( + "qm create 101 --kvm 0 --bios seabios -cdrom local:iso/minimal.iso", + "qm start 101", + "qm stop 101 --timeout 0" + ) + + # Legacy ovmf vm creation + machine.succeed( + "qm create 102 --kvm 0 --bios ovmf -cdrom local:iso/minimal.iso", + "qm start 102", + "qm stop 102 --timeout 0" + ) + + # UEFI ovmf vm creation + machine.succeed( + "qm create 103 --kvm 0 --bios ovmf --efidisk0 local:4,efitype=4m -cdrom local:iso/minimal.iso", + "qm start 103", + "qm stop 103 --timeout 0" + ) + + # UEFI ovmf vm creation with secure boot + machine.succeed( + "qm create 104 --kvm 0 --bios ovmf --efidisk0 local:4,efitype=4m,pre-enrolled-keys=1 -cdrom local:iso/minimal.iso", + "qm start 104", + "qm stop 104 --timeout 0" + ) + ''; +} diff --git a/deployment/flake-part.nix b/deployment/flake-part.nix index 5e822688..2e89c94e 100644 --- a/deployment/flake-part.nix +++ b/deployment/flake-part.nix @@ -1,6 +1,7 @@ { imports = [ ./check/basic/flake-part.nix + ./check/proxmox/flake-part.nix ./check/cli/flake-part.nix ]; } diff --git a/nixmoxer.conf b/nixmoxer.conf new file mode 100644 index 00000000..cf98d0b6 --- /dev/null +++ b/nixmoxer.conf @@ -0,0 +1,4 @@ +host=192.168.51.81 +verify_ssl=0 +user=kiara@ProcoliX +password= diff --git a/npins/sources.json b/npins/sources.json index 4971590b..6945c33b 100644 --- a/npins/sources.json +++ b/npins/sources.json @@ -25,6 +25,51 @@ "url": null, "hash": "1w2gsy6qwxa5abkv8clb435237iifndcxq0s79wihqw11a5yb938" }, + "crane": { + "type": "GitRelease", + "repository": { + "type": "GitHub", + "owner": "ipetkov", + "repo": "crane" + }, + "pre_releases": false, + "version_upper_bound": null, + "release_prefix": null, + "submodules": false, + "version": "v0.20.3", + "revision": "8468a0c46f81d806fd643ffe389fa80328b21cf4", + "url": "https://api.github.com/repos/ipetkov/crane/tarball/v0.20.3", + "hash": "0zw4275c3a6572w6vjmn850yddw6n3qagwfcq6ns247cx72fdfx0" + }, + "disko": { + "type": "GitRelease", + "repository": { + "type": "GitHub", + "owner": "nix-community", + "repo": "disko" + }, + "pre_releases": false, + "version_upper_bound": null, + "release_prefix": null, + "submodules": false, + "version": "v1.12.0", + "revision": "7121f74b976481bc36877abaf52adab2a178fcbe", + "url": "https://api.github.com/repos/nix-community/disko/tarball/v1.12.0", + "hash": "0wbx518d2x54yn4xh98cgm65wvj0gpy6nia6ra7ns4j63hx14fkq" + }, + "flake-inputs": { + "type": "Git", + "repository": { + "type": "GitHub", + "owner": "fricklerhandwerk", + "repo": "flake-inputs" + }, + "branch": "main", + "submodules": false, + "revision": "6461d0b56e790bf289af07c5e5261abbf4f536af", + "url": "https://github.com/fricklerhandwerk/flake-inputs/archive/6461d0b56e790bf289af07c5e5261abbf4f536af.tar.gz", + "hash": "03mwisvr1mc3nd33nvg4bvcyxjxpm4lwhwym39r0768cm1007ixl" + }, "flake-parts": { "type": "Git", "repository": { @@ -105,6 +150,32 @@ "revision": "f33a4d26226c05d501b9d4d3e5e60a3a59991921", "url": "https://github.com/nixos/nixpkgs/archive/f33a4d26226c05d501b9d4d3e5e60a3a59991921.tar.gz", "hash": "1b6dm1sn0bdpcsmxna0zzspjaixa2dald08005fry5jrbjvwafdj" + }, + "nixpkgs-stable": { + "type": "Git", + "repository": { + "type": "GitHub", + "owner": "nixos", + "repo": "nixpkgs" + }, + "branch": "nixos-25.05", + "submodules": false, + "revision": "7282cb574e0607e65224d33be8241eae7cfe0979", + "url": "https://github.com/nixos/nixpkgs/archive/7282cb574e0607e65224d33be8241eae7cfe0979.tar.gz", + "hash": "0klkpy7ah033y3cwj51a0l96lwmkqqvwgfv3kid4z9x5g2rqr0l5" + }, + "proxmox-nixos": { + "type": "Git", + "repository": { + "type": "GitHub", + "owner": "SaumonNet", + "repo": "proxmox-nixos" + }, + "branch": "main", + "submodules": false, + "revision": "48f39fbe2e8f90f9ac160dd4b6929f3ac06d8223", + "url": "https://github.com/SaumonNet/proxmox-nixos/archive/48f39fbe2e8f90f9ac160dd4b6929f3ac06d8223.tar.gz", + "hash": "0606qcs8x1jwckd1ivf52rqdmi3lkn66iiqh6ghd4kqx0g2bw3nv" } }, "version": 5