Merge pull request 'exports: rename special args' (#4765) from exports-1 into main

Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/4765
This commit is contained in:
hsjobeki
2025-08-14 16:11:07 +00:00
3 changed files with 19 additions and 8 deletions

View File

@@ -32,7 +32,7 @@ in
{ name, ... }:
{
_module.args._ctx = [ name ];
_module.args.exports' = config.exports;
_module.args.exports = config.exports;
_module.args.directory = directory;
}

View File

@@ -3,6 +3,7 @@
config,
_ctx,
directory,
exports,
...
}:
let
@@ -464,7 +465,7 @@ in
roles = applySettings instanceName config.instances.${instanceName};
in
{
inherit instanceName roles;
inherit instanceName roles exports;
machine = {
name = machineName;
roles = lib.attrNames (lib.filterAttrs (_n: v: v.machines ? ${machineName}) roles);
@@ -608,6 +609,7 @@ in
in
uniqueStrings (collectRoles machineScope.instances);
};
inherit exports;
inherit (machineScope) instances;
# There are no machine settings.
@@ -633,14 +635,23 @@ in
exports = mkOption {
description = ''
This services exports.
Gets merged with all other services exports
Gets merged with all other services exports.
Final value (merged and evaluated with other services) available as `exports'` in the arguments of this module.
Exports are used to share and expose information between instances.
Define exports in the [`perInstance`](#perInstance) or [`perMachine`](#perMachine) scope.
Accessing the exports:
```nix
{ exports', ... }: {
{ exports, ... }: {
_class = "clan.service";
# ...
roles.peer.perInstance = { exports, ...}: { ...};
# ...
perMachine = { exports, ...}: { ...};
}
```
'';

View File

@@ -24,7 +24,7 @@ let
machines.sara = { };
# A module that adds exports perMachine
modules.A =
{ exports', ... }:
{ exports, ... }:
{
manifest.name = "A";
roles.peer.perInstance =
@@ -32,10 +32,10 @@ let
{
# Cross reference a perMachine exports
exports.vars.generators."${machine.name}-network-ip".script =
"A:" + exports'.machines.${machine.name}.vars.generators.key.script;
"A:" + exports.machines.${machine.name}.vars.generators.key.script;
# Cross reference a perInstance exports from a different service
exports.vars.generators."${machine.name}-full-hostname".script =
"A:" + exports'.instances."B-1".vars.generators.hostname.script;
"A:" + exports.instances."B-1".vars.generators.hostname.script;
};
roles.server = { };
perMachine =