70 lines
2.1 KiB
Python
70 lines
2.1 KiB
Python
import argparse
|
|
import logging
|
|
|
|
from clan_lib.machines.hardware import (
|
|
HardwareConfig,
|
|
HardwareGenerateOptions,
|
|
generate_machine_hardware_info,
|
|
)
|
|
from clan_lib.machines.machines import Machine
|
|
from clan_lib.ssh.remote import Remote
|
|
|
|
from clan_cli.completions import add_dynamic_completer, complete_machines
|
|
|
|
from .types import machine_name_type
|
|
|
|
log = logging.getLogger(__name__)
|
|
|
|
|
|
def update_hardware_config_command(args: argparse.Namespace) -> None:
|
|
host_key_check = args.host_key_check
|
|
machine = Machine(flake=args.flake, name=args.machine)
|
|
opts = HardwareGenerateOptions(
|
|
machine=machine,
|
|
password=args.password,
|
|
backend=HardwareConfig(args.backend),
|
|
)
|
|
|
|
if args.target_host:
|
|
target_host = Remote.from_ssh_uri(
|
|
machine_name=machine.name, address=args.target_host
|
|
).override(host_key_check=host_key_check)
|
|
else:
|
|
target_host = machine.target_host().override(host_key_check=host_key_check)
|
|
|
|
generate_machine_hardware_info(opts, target_host)
|
|
|
|
|
|
def register_update_hardware_config(parser: argparse.ArgumentParser) -> None:
|
|
parser.set_defaults(func=update_hardware_config_command)
|
|
machine_parser = parser.add_argument(
|
|
"machine",
|
|
help="the name of the machine",
|
|
type=machine_name_type,
|
|
)
|
|
add_dynamic_completer(machine_parser, complete_machines)
|
|
parser.add_argument(
|
|
"target_host",
|
|
type=str,
|
|
nargs="?",
|
|
help="ssh address to install to in the form of user@host:2222",
|
|
)
|
|
parser.add_argument(
|
|
"--host-key-check",
|
|
choices=["strict", "ask", "tofu", "none"],
|
|
default="ask",
|
|
help="Host key (.ssh/known_hosts) check mode.",
|
|
)
|
|
parser.add_argument(
|
|
"--password",
|
|
help="Pre-provided password the cli will prompt otherwise if needed.",
|
|
type=str,
|
|
required=False,
|
|
)
|
|
parser.add_argument(
|
|
"--backend",
|
|
help="The type of hardware report to generate.",
|
|
choices=["nixos-generate-config", "nixos-facter"],
|
|
default="nixos-facter",
|
|
)
|