Add explicit dependency validation to vars, so that proper error
messages can be surfaced to the user.
Instead of:
```
Traceback (most recent call last):
File "/home/lhebendanz/Projects/clan-core/pkgs/clan-cli/clan_lib/async_run/__init__.py", line 154, in run
self.result = AsyncResult(_result=self.function(*self.args, **self.kwargs))
~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/lhebendanz/Projects/clan-core/pkgs/clan-cli/clan_cli/machines/update.py", line 62, in run_update_wit
h_network
run_machine_update(
~~~~~~~~~~~~~~~~~~^
machine=machine,
^^^^^^^^^^^^^^^^
...<2 lines>...
upload_inputs=upload_inputs,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/lhebendanz/Projects/clan-core/pkgs/clan-cli/clan_lib/machines/update.py", line 158, in run_machine_u
pdate
run_generators([machine], generators=None, full_closure=False)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/lhebendanz/Projects/clan-core/pkgs/clan-cli/clan_lib/vars/generate.py", line 156, in run_generators
all_generators = get_generators(machines, full_closure=True)
File "/home/lhebendanz/Projects/clan-core/pkgs/clan-cli/clan_lib/vars/generate.py", line 50, in get_generators
all_generators_list = Generator.get_machine_generators(
all_machines,
flake,
include_previous_values=include_previous_values,
)
File "/home/lhebendanz/Projects/clan-core/pkgs/clan-cli/clan_cli/vars/generator.py", line 246, in get_machine_ge
nerators
if generators_data[dep]["share"]
~~~~~~~~~~~~~~~^^^^^
KeyError: 'bla'
```
We now get:
```
$> Generator 'my_generator' on machine 'my_machine' depends on generator 'non_existing_generator', but 'non_existing_generator' does not exist
```
Closes: #5698
The machines_dir() function was hardcoding "machines" without considering
the directory parameter from buildClan/clan configuration. This caused
update-hardware-config and other commands to write files to the wrong
location when a custom directory was specified (e.g., directory = ./clan).
Solution:
1. Added relativeDirectory to inventoryClass in Nix, computed where both
self and directory have consistent store paths during evaluation
2. Updated machines_dir() to use this pre-computed relative path from Nix
via flake.select("clanInternals.inventoryClass.relativeDirectory")
Fixes: https://git.clan.lol/clan/clan-core/issues/2906