Merge pull request 'vars: make list/get fast' (#5316) from vars into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5316
This commit is contained in:
@@ -2,9 +2,9 @@ import argparse
|
||||
import logging
|
||||
|
||||
from clan_cli.completions import add_dynamic_completer, complete_machines
|
||||
from clan_cli.vars.generator import Generator
|
||||
from clan_lib.flake import require_flake
|
||||
from clan_lib.machines.machines import Machine
|
||||
from clan_lib.vars.generate import get_generators
|
||||
|
||||
from .generator import Var
|
||||
|
||||
@@ -12,6 +12,15 @@ log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def get_machine_vars(machine: Machine) -> list[Var]:
|
||||
"""Get all vars for a machine.
|
||||
|
||||
Args:
|
||||
machine: The machine to get vars for.
|
||||
|
||||
Returns:
|
||||
List of all vars for the machine with their current values and metadata.
|
||||
|
||||
"""
|
||||
# TODO: We dont have machine level store / this granularity yet
|
||||
# We should move the store definition to the flake, as there can be only one store per clan
|
||||
pub_store = machine.public_vars_store
|
||||
@@ -19,7 +28,9 @@ def get_machine_vars(machine: Machine) -> list[Var]:
|
||||
|
||||
all_vars = []
|
||||
|
||||
generators = get_generators(machines=[machine], full_closure=True)
|
||||
# Only load the specific machine's generators for better performance
|
||||
generators = Generator.get_machine_generators([machine.name], machine.flake)
|
||||
|
||||
for generator in generators:
|
||||
for var in generator.files:
|
||||
if var.secret:
|
||||
@@ -31,18 +42,16 @@ def get_machine_vars(machine: Machine) -> list[Var]:
|
||||
return all_vars
|
||||
|
||||
|
||||
def stringify_vars(_vars: list[Var]) -> str:
|
||||
return "\n".join([str(var) for var in _vars])
|
||||
|
||||
|
||||
def stringify_all_vars(machine: Machine) -> str:
|
||||
return stringify_vars(get_machine_vars(machine))
|
||||
all_vars = get_machine_vars(machine)
|
||||
return "\n".join([str(var) for var in all_vars])
|
||||
|
||||
|
||||
def list_command(args: argparse.Namespace) -> None:
|
||||
flake = require_flake(args.flake)
|
||||
machine = Machine(name=args.machine, flake=flake)
|
||||
print(stringify_all_vars(machine))
|
||||
all_vars = get_machine_vars(machine)
|
||||
print("\n".join([str(var) for var in all_vars]))
|
||||
|
||||
|
||||
def register_list_parser(parser: argparse.ArgumentParser) -> None:
|
||||
|
||||
Reference in New Issue
Block a user