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:
DavHau
2025-09-30 10:15:08 +00:00

View File

@@ -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: