From dbd859bea22de2af763b4e783592c3ea3de5dbd0 Mon Sep 17 00:00:00 2001 From: Johannes Kirschbauer Date: Sun, 20 Apr 2025 13:05:28 +0200 Subject: [PATCH] machine/vars: expose result direclty via vars submodule; keep deployment.data alias for now --- nixosModules/clanCore/vars/default.nix | 30 +--------------- nixosModules/clanCore/vars/interface.nix | 44 ++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 29 deletions(-) diff --git a/nixosModules/clanCore/vars/default.nix b/nixosModules/clanCore/vars/default.nix index c5ac0f41e..8d1a7a4ea 100644 --- a/nixosModules/clanCore/vars/default.nix +++ b/nixosModules/clanCore/vars/default.nix @@ -35,35 +35,7 @@ in }; config.system.clan.deployment.data = { - vars = { - generators = lib.flip lib.mapAttrs config.clan.core.vars.generators ( - _name: generator: { - inherit (generator) - name - dependencies - validationHash - migrateFact - share - prompts - ; - - files = lib.flip lib.mapAttrs generator.files ( - _name: file: { - inherit (file) - name - owner - group - mode - deploy - secret - neededFor - ; - } - ); - } - ); - inherit (config.clan.core.vars.settings) secretModule publicModule; - }; + vars = config.clan.core.vars._serialized; inherit (config.clan.core.networking) targetHost buildHost; inherit (config.clan.core.deployment) requireExplicitUpdate; }; diff --git a/nixosModules/clanCore/vars/interface.nix b/nixosModules/clanCore/vars/interface.nix index b6cf78874..d58634f1c 100644 --- a/nixosModules/clanCore/vars/interface.nix +++ b/nixosModules/clanCore/vars/interface.nix @@ -33,6 +33,50 @@ let in { options = { + _serialized = lib.mkOption { + readOnly = true; + internal = true; + description = '' + JSON serialization of the generators. + This is read from the python client to generate the specified ressources. + ''; + default = { + # TODO: We don't support per-machine choice of backends + # Configuring different backend doesn't work, this information should be made read only and configured + # Via clan.settings instead. + inherit (config.settings) secretModule publicModule; + # Serialize generators, so that we can use them in the python client + # This need to be done because we have some non-serializable values in the generators + # Like the finalScript (derivation) or pkgs. + generators = lib.flip lib.mapAttrs config.generators ( + _name: generator: { + inherit (generator) + name + dependencies + validationHash + migrateFact + share + prompts + ; + + files = lib.flip lib.mapAttrs generator.files ( + _name: file: { + inherit (file) + name + owner + group + mode + deploy + secret + neededFor + ; + } + ); + } + ); + }; + }; + settings = import ./settings-opts.nix { inherit lib; }; generators = lib.mkOption { description = ''