nixos/kanidm: add option and tests for imperative group management

This commit is contained in:
oddlama
2025-06-08 11:38:33 +02:00
parent b7f5fce1ca
commit 5f833b1008
2 changed files with 30 additions and 0 deletions
@@ -460,6 +460,17 @@ in
apply = unique;
default = [ ];
};
overwriteMembers = mkOption {
description = ''
Whether the member list should be overwritten each time (true) or appended
(false). Append mode allows interactive group management in addition to the
declared members. Also, future member removals cannot be reflected
automatically in append mode.
'';
type = types.bool;
default = true;
};
};
config.members = concatLists (
flip mapAttrsToList cfg.provision.persons (
+19
View File
@@ -73,6 +73,10 @@ in
};
groups.testgroup1 = { };
groups.imperative = {
overwriteMembers = false;
members = [ "testuser1" ];
};
persons.testuser1 = {
displayName = "Test User";
@@ -133,6 +137,11 @@ in
};
groups.testgroup1 = { };
groups.imperative = {
overwriteMembers = false;
# Will be retained:
# members = [ "testuser1" ];
};
persons.testuser1 = {
displayName = "Test User (changed)";
@@ -351,6 +360,10 @@ in
out = provision.succeed("kanidm group get testgroup1")
assert_contains(out, "name: testgroup1")
out = provision.succeed("kanidm group get imperative")
assert_contains(out, "name: imperative")
assert_contains(out, "member: testuser1")
out = provision.succeed("kanidm group get supergroup1")
assert_contains(out, "name: supergroup1")
assert_contains(out, "member: testgroup1")
@@ -361,6 +374,7 @@ in
assert_contains(out, "legalname: Jane Doe")
assert_contains(out, "mail: jane.doe@example.com")
assert_contains(out, "memberof: testgroup1")
assert_contains(out, "memberof: imperative")
assert_contains(out, "memberof: service1-access")
out = provision.succeed("kanidm person get testuser2")
@@ -405,6 +419,10 @@ in
out = provision.succeed("kanidm group get testgroup1")
assert_contains(out, "name: testgroup1")
out = provision.succeed("kanidm group get imperative")
assert_contains(out, "name: imperative")
assert_contains(out, "member: testuser1")
out = provision.succeed("kanidm group get supergroup1")
assert_contains(out, "name: supergroup1")
assert_lacks(out, "member: testgroup1")
@@ -416,6 +434,7 @@ in
assert_contains(out, "mail: jane.doe@example.com")
assert_contains(out, "mail: second.doe@example.com")
assert_lacks(out, "memberof: testgroup1")
assert_contains(out, "memberof: imperative")
assert_contains(out, "memberof: service1-access")
out = provision.succeed("kanidm person get testuser2")