1{
2 config,
3 lib,
4 pkgs,
5 ...
6}:
7let
8 cfg = config.services.pacemaker;
9in
10{
11 # interface
12 options.services.pacemaker = {
13 enable = lib.mkEnableOption "pacemaker";
14
15 package = lib.mkPackageOption pkgs "pacemaker" { };
16 };
17
18 # implementation
19 config = lib.mkIf cfg.enable {
20 assertions = [
21 {
22 assertion = config.services.corosync.enable;
23 message = ''
24 Enabling services.pacemaker requires a services.corosync configuration.
25 '';
26 }
27 ];
28
29 environment.systemPackages = [ cfg.package ];
30
31 # required by pacemaker
32 users.users.hacluster = {
33 isSystemUser = true;
34 group = "pacemaker";
35 home = "/var/lib/pacemaker";
36 };
37 users.groups.pacemaker = { };
38
39 systemd.tmpfiles.rules = [
40 "d /var/log/pacemaker 0700 hacluster pacemaker -"
41 ];
42
43 systemd.packages = [ cfg.package ];
44 systemd.services.pacemaker = {
45 wantedBy = [ "multi-user.target" ];
46 serviceConfig = {
47 StateDirectory = "pacemaker";
48 StateDirectoryMode = "0700";
49 };
50 };
51 };
52}