data model: add classes #7

Closed
kiara wants to merge 1 commit from data-model-add-classes into deployment-data-model-with-tests
Showing only changes of commit 9f596ad820 - Show all commits

View file

@ -11,12 +11,14 @@ let
attrTag
deferredModuleWith
submodule
submoduleWith
optionType
functionTo
;
functionType = import ./function.nix;
application-resources = submodule {
_class = "fediversity-application-requirements";
options.resources = mkOption {
# TODO: maybe transpose, and group the resources by type instead
type = attrsOf (
@ -31,7 +33,6 @@ let
inputs.nixops4.modules.nixops4Deployment.default
{
_class = "nixops4Deployment";
_module.args = {
kiara marked this conversation as resolved Outdated

Very likely not needed, as noted in the other PR

Very likely not needed, as noted in the other PR
Outdated
Review

resolving until the upstream PR may supersede this, now #6 is merged

resolving until the upstream PR may supersede this, now #6 is merged
Outdated
Review

given this got merged upstream, i rebased to remove this now, ahead of our updating nixops4 (which i will consider out of scope for this PR, as i'm sure we will down the line)

given this got merged upstream, i rebased to remove this now, ahead of our updating nixops4 (which i will consider out of scope for this PR, as i'm sure we will down the line)
resourceProviderSystem = builtins.currentSystem;
resources = { };
@ -41,11 +42,15 @@ let
};
in
{
_class = "fediversity-settings";
options = {
resources = mkOption {
description = "Collection of deployment resources that can be required by applications and policed by hosting providers";
type = attrsOf (
submodule (
type = attrsOf (submoduleWith {
class = "fediversity-resource";
modules = [
(
{ ... }:
{
_class = "fediversity-resource";
@ -81,12 +86,15 @@ in
};
}
)
);
];
});
};
applications = mkOption {
description = "Collection of Fediversity applications";
type = attrsOf (
submodule (application: {
type = attrsOf (submoduleWith {
class = "fediversity-application";
modules = [
(application: {
_class = "fediversity-application";
options = {
description = mkOption {
@ -110,7 +118,10 @@ in
# TODO(@fricklerhandwerk): this needs a better name, it's just the type
config-mapping = mkOption {
description = "Function type for the mapping from application configuration to required resources";
type = submodule functionType;
type = submoduleWith {
class = "module-function";
modules = [ functionType ];
};
readOnly = true;
default = {
input-type = submodule application.config.module;
@ -119,13 +130,15 @@ in
};
};
})
);
];
});
};
environments = mkOption {
description = "Run-time environments for Fediversity applications to be deployed to";
type = attrsOf (
submodule (environment: {
_class = "fediversity-environment";
type = attrsOf (submoduleWith {
class = "fediversity-environment";
modules = [

I don't think this is an improvement in readability

I don't think this is an improvement in readability
Outdated
Review

the PR's intent was semantic rather than just documentation - even if (as noted in Fediversity/Fediversity#481 (comment)) i haven't fully grasped the full extent of subModuleWith's class parameter.

the PR's intent was semantic rather than just documentation - even if (as noted in https://git.fediversity.eu/Fediversity/Fediversity/pulls/481#issuecomment-9183) i haven't fully grasped the full extent of `subModuleWith`'s `class` parameter.
Outdated
Review

looks like a lot of that pertains to merging logic - maybe the type checks are the main thing then

looks like a lot of that pertains to merging logic - maybe the type checks are the main thing then
(environment: {
options = {
resources = mkOption {
description = ''
@ -136,7 +149,15 @@ in
# TODO: maybe transpose, and group the resources by type instead
type = attrsOf (
attrTag (
lib.mapAttrs (_name: resource: mkOption { type = submodule resource.policy; }) config.resources
lib.mapAttrs (
_name: resource:
mkOption {
type = submoduleWith {
class = "fediversity-resource-policy";
modules = [ resource.policy ];
};
}
) config.resources
)
);
};
@ -146,7 +167,10 @@ in
};
resource-mapping = mkOption {
description = "Function type for the mapping from resources to a (NixOps4) deployment";
type = submodule functionType;
type = submoduleWith {
class = "module-function";
modules = [ functionType ];
};
readOnly = true;
default = {
input-type = application-resources;
@ -173,7 +197,8 @@ in
};
};
})
);
];
});
};
configuration = mkOption {
description = "Configuration type declaring options to be set by operators";
@ -188,7 +213,10 @@ in
_name: application:
mkOption {
description = application.description;
type = submodule application.module;
type = submoduleWith {
class = "fediversity-application-config";
modules = [ application.module ];
};
default = { };
}
) config.applications;