Merge pull request 'fix-hw-generate' (#1964) from fix-hw-generate into main
This commit is contained in:
@@ -10,10 +10,10 @@
|
||||
let
|
||||
dependencies = [
|
||||
pkgs.disko
|
||||
self.clanInternals.machines.${pkgs.hostPlatform.system}.test_install_machine.config.system.build.toplevel
|
||||
self.clanInternals.machines.${pkgs.hostPlatform.system}.test_install_machine.config.system.build.diskoScript
|
||||
self.clanInternals.machines.${pkgs.hostPlatform.system}.test_install_machine.config.system.build.diskoScript.drvPath
|
||||
self.clanInternals.machines.${pkgs.hostPlatform.system}.test_install_machine.config.system.clan.deployment.file
|
||||
self.clanInternals.machines.${pkgs.hostPlatform.system}.test-install-machine.config.system.build.toplevel
|
||||
self.clanInternals.machines.${pkgs.hostPlatform.system}.test-install-machine.config.system.build.diskoScript
|
||||
self.clanInternals.machines.${pkgs.hostPlatform.system}.test-install-machine.config.system.build.diskoScript.drvPath
|
||||
self.clanInternals.machines.${pkgs.hostPlatform.system}.test-install-machine.config.system.clan.deployment.file
|
||||
] ++ builtins.map (i: i.outPath) (builtins.attrValues self.inputs);
|
||||
closureInfo = pkgs.closureInfo { rootPaths = dependencies; };
|
||||
in
|
||||
@@ -42,7 +42,7 @@
|
||||
testScript = ''
|
||||
start_all()
|
||||
|
||||
machine.succeed("clan flash --debug --flake ${../..} --yes --disk main /dev/vdb test_install_machine")
|
||||
machine.succeed("clan flash --debug --flake ${../..} --yes --disk main /dev/vdb test-install-machine")
|
||||
'';
|
||||
} { inherit pkgs self; };
|
||||
};
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
{ self, lib, ... }:
|
||||
{
|
||||
clan.machines.test_install_machine = {
|
||||
clan.core.networking.targetHost = "test_install_machine";
|
||||
clan.machines.test-install-machine = {
|
||||
clan.core.networking.targetHost = "test-install-machine";
|
||||
fileSystems."/".device = lib.mkDefault "/dev/vdb";
|
||||
boot.loader.grub.device = lib.mkDefault "/dev/vdb";
|
||||
|
||||
imports = [ self.nixosModules.test_install_machine ];
|
||||
imports = [ self.nixosModules.test-install-machine ];
|
||||
};
|
||||
flake.nixosModules = {
|
||||
test_install_machine =
|
||||
test-install-machine =
|
||||
{ lib, modulesPath, ... }:
|
||||
{
|
||||
imports = [
|
||||
@@ -34,9 +34,9 @@
|
||||
let
|
||||
dependencies = [
|
||||
self
|
||||
self.nixosConfigurations.test_install_machine.config.system.build.toplevel
|
||||
self.nixosConfigurations.test_install_machine.config.system.build.diskoScript
|
||||
self.nixosConfigurations.test_install_machine.config.system.clan.deployment.file
|
||||
self.nixosConfigurations.test-install-machine.config.system.build.toplevel
|
||||
self.nixosConfigurations.test-install-machine.config.system.build.diskoScript
|
||||
self.nixosConfigurations.test-install-machine.config.system.clan.deployment.file
|
||||
pkgs.stdenv.drvPath
|
||||
pkgs.nixos-anywhere
|
||||
] ++ builtins.map (i: i.outPath) (builtins.attrValues self.inputs);
|
||||
@@ -96,9 +96,12 @@
|
||||
start_all()
|
||||
|
||||
client.succeed("${pkgs.coreutils}/bin/install -Dm 600 ${../lib/ssh/privkey} /root/.ssh/id_ed25519")
|
||||
client.wait_until_succeeds("ssh -o StrictHostKeyChecking=accept-new -v root@target hostname")
|
||||
|
||||
client.succeed("clan machines install --debug --flake ${../..} --yes test_install_machine root@target >&2")
|
||||
client.wait_until_succeeds("timeout 2 ssh -o StrictHostKeyChecking=accept-new -v root@target hostname")
|
||||
client.succeed("cp -r ${../..} test-flake && chmod -R +w test-flake")
|
||||
client.fail("test -f test-flake/machines/test-install-machine/hardware-configuration.nix")
|
||||
client.succeed("clan machines hw-generate --flake test-flake test-install-machine root@target>&2")
|
||||
client.succeed("test -f test-flake/machines/test-install-machine/hardware-configuration.nix")
|
||||
client.succeed("clan machines install --debug --flake ${../..} --yes test-install-machine root@target >&2")
|
||||
try:
|
||||
target.shutdown()
|
||||
except BrokenPipeError:
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import argparse
|
||||
import dataclasses
|
||||
import json
|
||||
import logging
|
||||
from dataclasses import dataclass
|
||||
from pathlib import Path
|
||||
from typing import Literal
|
||||
|
||||
@@ -19,7 +19,7 @@ from .types import machine_name_type
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@dataclasses.dataclass
|
||||
@dataclass
|
||||
class HardwareReport:
|
||||
file: Literal["nixos-generate-config", "nixos-facter"]
|
||||
|
||||
@@ -120,8 +120,6 @@ def generate_machine_hardware_info(
|
||||
[
|
||||
"nixpkgs#openssh",
|
||||
"nixpkgs#sshpass",
|
||||
# Provides nixos-generate-config on non-NixOS systems
|
||||
"nixpkgs#nixos-install-tools",
|
||||
],
|
||||
[
|
||||
*(["sshpass", "-p", f"{password}"] if password else []),
|
||||
@@ -202,15 +200,29 @@ def generate_machine_hardware_info(
|
||||
return HardwareReport("nixos-generate-config")
|
||||
|
||||
|
||||
@dataclass
|
||||
class HardwareGenerateOptions:
|
||||
flake: FlakeId
|
||||
machine: str
|
||||
target_host: str | None
|
||||
password: str | None
|
||||
force: bool | None
|
||||
|
||||
|
||||
def hw_generate_command(args: argparse.Namespace) -> None:
|
||||
hw_info = generate_machine_hardware_info(
|
||||
args.flake, args.machine, args.hostname, args.password, args.force
|
||||
opts = HardwareGenerateOptions(
|
||||
flake=args.flake,
|
||||
machine=args.machine,
|
||||
target_host=args.target_host,
|
||||
password=args.password,
|
||||
force=args.force,
|
||||
)
|
||||
hw_info = generate_machine_hardware_info(
|
||||
opts.flake, opts.machine, opts.target_host, opts.password, opts.force
|
||||
)
|
||||
print("----")
|
||||
print("Successfully generated hardware information.")
|
||||
print(f"Target: {args.machine} ({args.hostname})")
|
||||
print(f"Target: {opts.machine} ({opts.target_host})")
|
||||
print(f"Type: {hw_info.file}")
|
||||
print("----")
|
||||
|
||||
|
||||
def register_hw_generate(parser: argparse.ArgumentParser) -> None:
|
||||
|
||||
@@ -17,6 +17,6 @@ def machine_name_type(arg_value: str) -> str:
|
||||
)
|
||||
if not VALID_HOSTNAME.match(arg_value):
|
||||
raise argparse.ArgumentTypeError(
|
||||
"Invalid character in machine name. Allowed characters are a-z, 0-9, ., -, and _. Must not start with a number"
|
||||
"Invalid character in machine name. Allowed characters are a-z, 0-9, ., and -. Must not start with a number"
|
||||
)
|
||||
return arg_value
|
||||
|
||||
Reference in New Issue
Block a user