Files
Quentin Smith a72caaa01c nixos/openafs: Extend CellServDB options
Previously, servers could only be supplied for ThisCell. This meant that
if a server and client have different ThisCell values, the client's
CellServDB couldn't be configured for its own server.

The previous list values are still accepted, but now a CellServDB option
can also be specified as an attrset of cell names to servers.
2026-01-06 15:37:41 -05:00

53 lines
1.2 KiB
Nix

{ config, lib, ... }:
let
inherit (lib)
concatStringsSep
concatMapAttrsStringSep
mkOption
types
optionalString
;
cellServDBMemberType = types.submodule {
options = {
ip = mkOption {
type = types.str;
default = "";
example = "1.2.3.4";
description = "IP Address of a database server";
};
dnsname = mkOption {
type = types.str;
default = "";
example = "afs.example.org";
description = "DNS full-qualified domain name of a database server";
};
};
};
cellServDBCellType = types.listOf cellServDBMemberType;
in
{
mkCellServDB = concatMapAttrsStringSep "" (
cellName: db:
''
>${cellName}
''
+ (concatStringsSep "\n" (
map (dbm: optionalString (dbm.ip != "" && dbm.dnsname != "") "${dbm.ip} #${dbm.dnsname}") db
))
+ "\n"
);
# CellServDB configuration type
cellServDBType =
thisCell:
types.coercedTo (types.listOf types.anything) (m: { "${thisCell}" = m; }) (
types.attrsOf cellServDBCellType
);
openafsMod = config.services.openafsClient.packages.module;
openafsBin = config.services.openafsClient.packages.programs;
openafsSrv = config.services.openafsServer.package;
}