clan-core/pkgs/clan-cli/clan_cli/facts/list.py

48 lines
1.5 KiB
Python
Raw Normal View History

2024-02-12 12:31:12 +00:00
import argparse
import importlib
2024-02-14 06:15:59 +00:00
import json
2024-02-12 12:31:12 +00:00
import logging
from ..completions import add_dynamic_completer, complete_machines
2024-02-12 12:31:12 +00:00
from ..machines.machines import Machine
log = logging.getLogger(__name__)
# TODO get also secret facts
2024-02-12 12:31:12 +00:00
def get_all_facts(machine: Machine) -> dict:
public_facts_module = importlib.import_module(machine.public_facts_module)
public_facts_store = public_facts_module.FactStore(machine=machine)
2024-02-12 12:31:12 +00:00
# for service in machine.secrets_data:
# facts[service] = {}
# for fact in machine.secrets_data[service]["facts"]:
# fact_content = fact_store.get(service, fact)
# if fact_content:
# facts[service][fact] = fact_content.decode()
# else:
# log.error(f"Fact {fact} for service {service} is missing")
return public_facts_store.get_all()
2024-02-12 12:31:12 +00:00
def get_command(args: argparse.Namespace) -> None:
machine = Machine(name=args.machine, flake=args.flake)
# the raw_facts are bytestrings making them not json serializable
raw_facts = get_all_facts(machine)
facts = dict()
for key in raw_facts["TODO"]:
facts[key] = raw_facts["TODO"][key].decode("utf8")
print(json.dumps(facts, indent=4))
2024-02-12 12:31:12 +00:00
def register_list_parser(parser: argparse.ArgumentParser) -> None:
machines_parser = parser.add_argument(
2024-02-12 12:31:12 +00:00
"machine",
help="The machine to print facts for",
)
add_dynamic_completer(machines_parser, complete_machines)
2024-02-12 12:31:12 +00:00
parser.set_defaults(func=get_command)