diff --git a/lib/inventory/build-inventory/default.nix b/lib/inventory/build-inventory/default.nix index 5e39cee37..5b5b53a4d 100644 --- a/lib/inventory/build-inventory/default.nix +++ b/lib/inventory/build-inventory/default.nix @@ -63,6 +63,7 @@ let ++ (lib.foldlAttrs ( # [ Modules ], String, ServiceConfig acc2: instanceName: serviceConfig: + let resolvedRoles = builtins.mapAttrs ( roleName: members: @@ -119,8 +120,9 @@ let globalExtraModules ++ machineExtraModules ++ roleServiceExtraModules ); in - - if isInService then + if !(serviceConfig.enabled or true) then + acc2 + else if isInService then acc2 ++ [ { diff --git a/lib/inventory/build-inventory/interface.nix b/lib/inventory/build-inventory/interface.nix index 7ce60c89a..56c05fb3b 100644 --- a/lib/inventory/build-inventory/interface.nix +++ b/lib/inventory/build-inventory/interface.nix @@ -184,6 +184,19 @@ in # instance name { name, ... }: { + options.enabled = lib.mkOption { + type = lib.types.bool; + default = true; + description = '' + Enable or disable the complete service. + + If the service is disabled, it will not be added to any machine. + + !!! Note + This flag is primarily used to temporarily disable a service. + I.e. A 'backup service' without any 'server' might be incomplete and would cause failure if enabled. + ''; + }; options.meta = metaOptionsWith name; options.extraModules = extraModulesOption; options.config = moduleConfig // { diff --git a/lib/inventory/tests/default.nix b/lib/inventory/tests/default.nix index 3b85191c0..2fea17c42 100644 --- a/lib/inventory/tests/default.nix +++ b/lib/inventory/tests/default.nix @@ -200,4 +200,33 @@ in msg = "no machine with tag '\\w+' found"; }; }; + test_inventory_disabled_service = + let + configs = buildInventory { + directory = ./.; + inventory = { + services = { + borgbackup.instance_1 = { + enabled = false; + roles.client.machines = [ "machine_1" ]; + }; + }; + machines = { + "machine_1" = { + + }; + }; + }; + }; + in + { + expr = { + machine_1_config = (builtins.head configs."machine_1"); + }; + expected = { + # Empty config + machine_1_config = { }; + }; + + }; }