- Change Generator class to store machine name as string instead of Machine reference - Update Generator.generators_from_flake() to only require machine name and flake - Refactor check_vars() to accept machine name and flake instead of Machine object - Create Machine instances only when needed for specific operations This continues the effort to reduce dependencies on the Machine class, making the codebase more modular and easier to refactor.
52 lines
1.5 KiB
Python
52 lines
1.5 KiB
Python
import argparse
|
|
import logging
|
|
|
|
from clan_cli.completions import add_dynamic_completer, complete_machines
|
|
from clan_lib.errors import ClanError
|
|
from clan_lib.machines.machines import Machine
|
|
|
|
log = logging.getLogger(__name__)
|
|
|
|
|
|
def fix_vars(machine: Machine, generator_name: None | str = None) -> None:
|
|
from clan_cli.vars.generate import Generator
|
|
|
|
generators = Generator.generators_from_flake(machine.name, machine.flake)
|
|
if generator_name:
|
|
for generator in generators:
|
|
if generator_name == generator.name:
|
|
generators = [generator]
|
|
break
|
|
else:
|
|
err_msg = (
|
|
f"Generator '{generator_name}' not found in machine {machine.name}"
|
|
)
|
|
raise ClanError(err_msg)
|
|
|
|
for generator in generators:
|
|
machine.public_vars_store.fix(generator=generator)
|
|
machine.secret_vars_store.fix(generator=generator)
|
|
|
|
|
|
def fix_command(args: argparse.Namespace) -> None:
|
|
machine = Machine(
|
|
name=args.machine,
|
|
flake=args.flake,
|
|
)
|
|
fix_vars(machine, generator_name=args.generator)
|
|
|
|
|
|
def register_fix_parser(parser: argparse.ArgumentParser) -> None:
|
|
machines_parser = parser.add_argument(
|
|
"machine",
|
|
help="The machine to fix vars for",
|
|
)
|
|
add_dynamic_completer(machines_parser, complete_machines)
|
|
|
|
parser.add_argument(
|
|
"--generator",
|
|
"-g",
|
|
help="the generator to check",
|
|
)
|
|
parser.set_defaults(func=fix_command)
|