CLI: add option to generate facter.json

This commit is contained in:
Johannes Kirschbauer
2024-08-23 18:02:45 +02:00
parent d3f8c4ec86
commit 2d05b98ae3

View File

@@ -104,6 +104,9 @@ def generate_machine_hardware_info(
password: str | None = None, password: str | None = None,
keyfile: str | None = None, keyfile: str | None = None,
force: bool | None = False, force: bool | None = False,
report_type: Literal[
"nixos-generate-config", "nixos-facter"
] = "nixos-generate-config",
) -> HardwareReport: ) -> HardwareReport:
""" """
Generate hardware information for a machine Generate hardware information for a machine
@@ -114,6 +117,14 @@ def generate_machine_hardware_info(
if hostname is not None: if hostname is not None:
machine.target_host_address = hostname machine.target_host_address = hostname
nixos_generate_cmd = [
"nixos-generate-config", # Filesystems are managed by disko
"--no-filesystems",
"--show-hardware-config",
]
nixos_facter_cmd = ["nix", "run", "--refresh", "github:numtide/nixos-facter"]
host = machine.target_host host = machine.target_host
target_host = f"{host.user or 'root'}@{host.host}" target_host = f"{host.user or 'root'}@{host.host}"
cmd = nix_shell( cmd = nix_shell(
@@ -137,10 +148,11 @@ def generate_machine_hardware_info(
else [] else []
), ),
target_host, target_host,
"nixos-generate-config", *(
# Filesystems are managed by disko nixos_generate_cmd
"--no-filesystems", if report_type == "nixos-generate-config"
"--show-hardware-config", else nixos_facter_cmd
),
], ],
) )
out = run(cmd) out = run(cmd)
@@ -149,7 +161,9 @@ def generate_machine_hardware_info(
log.error(out) log.error(out)
raise ClanError(f"Failed to inspect {machine_name}. Address: {hostname}") raise ClanError(f"Failed to inspect {machine_name}. Address: {hostname}")
hw_file = Path(f"{clan_dir}/machines/{machine_name}/hardware-configuration.nix") hw_file = Path(
f"{clan_dir}/machines/{machine_name}/{hw_nix_file if report_type == 'nixos-generate-config' else facter_file}"
)
hw_file.parent.mkdir(parents=True, exist_ok=True) hw_file.parent.mkdir(parents=True, exist_ok=True)
# Check if the hardware-configuration.nix file is a template # Check if the hardware-configuration.nix file is a template
@@ -167,7 +181,7 @@ def generate_machine_hardware_info(
# Backup the existing file # Backup the existing file
backup_file = hw_file.with_suffix(".bak") backup_file = hw_file.with_suffix(".bak")
hw_file.replace(backup_file) hw_file.replace(backup_file)
print(f"Backed up existing hardware-configuration.nix to {backup_file}") print(f"Backed up existing {hw_file} to {backup_file}")
with open(hw_file, "w") as f: with open(hw_file, "w") as f:
f.write(out.stdout) f.write(out.stdout)
@@ -197,7 +211,7 @@ def generate_machine_hardware_info(
location=f"{__name__} {hw_file}", location=f"{__name__} {hw_file}",
) )
return HardwareReport("nixos-generate-config") return HardwareReport(report_type)
@dataclass @dataclass