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, ... }: { name, ... }:
{ {
_module.args._ctx = [ name ]; _module.args._ctx = [ name ];
_module.args.exports' = config.exports; _module.args.exports = config.exports;
_module.args.directory = directory; _module.args.directory = directory;
} }

View File

@@ -3,6 +3,7 @@
config, config,
_ctx, _ctx,
directory, directory,
exports,
... ...
}: }:
let let
@@ -464,7 +465,7 @@ in
roles = applySettings instanceName config.instances.${instanceName}; roles = applySettings instanceName config.instances.${instanceName};
in in
{ {
inherit instanceName roles; inherit instanceName roles exports;
machine = { machine = {
name = machineName; name = machineName;
roles = lib.attrNames (lib.filterAttrs (_n: v: v.machines ? ${machineName}) roles); roles = lib.attrNames (lib.filterAttrs (_n: v: v.machines ? ${machineName}) roles);
@@ -608,6 +609,7 @@ in
in in
uniqueStrings (collectRoles machineScope.instances); uniqueStrings (collectRoles machineScope.instances);
}; };
inherit exports;
inherit (machineScope) instances; inherit (machineScope) instances;
# There are no machine settings. # There are no machine settings.
@@ -633,14 +635,23 @@ in
exports = mkOption { exports = mkOption {
description = '' description = ''
This services exports. 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 ```nix
{ exports', ... }: { { exports, ... }: {
_class = "clan.service"; _class = "clan.service";
# ... # ...
roles.peer.perInstance = { exports, ...}: { ...};
# ...
perMachine = { exports, ...}: { ...};
} }
``` ```
''; '';

View File

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