clan: add dynamic completion function for backup providers
This commit is contained in:
@@ -118,6 +118,49 @@ def complete_services_for_machine(
|
|||||||
return services_dict
|
return services_dict
|
||||||
|
|
||||||
|
|
||||||
|
def complete_backup_providers_for_machine(
|
||||||
|
prefix: str, parsed_args: argparse.Namespace, **kwargs: Any
|
||||||
|
) -> Iterable[str]:
|
||||||
|
"""
|
||||||
|
Provides completion functionality for machine backup providers.
|
||||||
|
"""
|
||||||
|
services: list[str] = []
|
||||||
|
# TODO: consolidate, if multiple machines are used
|
||||||
|
machines: list[str] = parsed_args.machines
|
||||||
|
|
||||||
|
def run_cmd() -> None:
|
||||||
|
try:
|
||||||
|
if (clan_dir_result := clan_dir(None)) is not None:
|
||||||
|
flake = clan_dir_result
|
||||||
|
else:
|
||||||
|
flake = "."
|
||||||
|
services_result = json.loads(
|
||||||
|
run(
|
||||||
|
nix_eval(
|
||||||
|
flags=[
|
||||||
|
f"{flake}#nixosConfigurations.{machines[0]}.config.clanCore.backups.providers",
|
||||||
|
"--apply",
|
||||||
|
"builtins.attrNames",
|
||||||
|
],
|
||||||
|
),
|
||||||
|
).stdout.strip()
|
||||||
|
)
|
||||||
|
|
||||||
|
services.extend(services_result)
|
||||||
|
except subprocess.CalledProcessError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
thread = threading.Thread(target=run_cmd)
|
||||||
|
thread.start()
|
||||||
|
thread.join(timeout=COMPLETION_TIMEOUT)
|
||||||
|
|
||||||
|
if thread.is_alive():
|
||||||
|
return iter([])
|
||||||
|
|
||||||
|
services_dict = {name: "service" for name in services}
|
||||||
|
return services_dict
|
||||||
|
|
||||||
|
|
||||||
def complete_secrets(
|
def complete_secrets(
|
||||||
prefix: str, parsed_args: argparse.Namespace, **kwargs: Any
|
prefix: str, parsed_args: argparse.Namespace, **kwargs: Any
|
||||||
) -> Iterable[str]:
|
) -> Iterable[str]:
|
||||||
|
|||||||
Reference in New Issue
Block a user