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
|
import logging
|
||||||
|
|
||||||
from clan_cli.completions import add_dynamic_completer, complete_machines
|
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.flake import require_flake
|
||||||
from clan_lib.machines.machines import Machine
|
from clan_lib.machines.machines import Machine
|
||||||
from clan_lib.vars.generate import get_generators
|
|
||||||
|
|
||||||
from .generator import Var
|
from .generator import Var
|
||||||
|
|
||||||
@@ -12,6 +12,15 @@ log = logging.getLogger(__name__)
|
|||||||
|
|
||||||
|
|
||||||
def get_machine_vars(machine: Machine) -> list[Var]:
|
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
|
# 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
|
# We should move the store definition to the flake, as there can be only one store per clan
|
||||||
pub_store = machine.public_vars_store
|
pub_store = machine.public_vars_store
|
||||||
@@ -19,7 +28,9 @@ def get_machine_vars(machine: Machine) -> list[Var]:
|
|||||||
|
|
||||||
all_vars = []
|
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 generator in generators:
|
||||||
for var in generator.files:
|
for var in generator.files:
|
||||||
if var.secret:
|
if var.secret:
|
||||||
@@ -31,18 +42,16 @@ def get_machine_vars(machine: Machine) -> list[Var]:
|
|||||||
return all_vars
|
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:
|
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:
|
def list_command(args: argparse.Namespace) -> None:
|
||||||
flake = require_flake(args.flake)
|
flake = require_flake(args.flake)
|
||||||
machine = Machine(name=args.machine, flake=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:
|
def register_list_parser(parser: argparse.ArgumentParser) -> None:
|
||||||
|
|||||||
Reference in New Issue
Block a user