]>
Commit | Line | Data |
---|---|---|
eb071dd4 IB |
1 | { lib }: |
2 | with lib.attrsets; | |
3 | with lib.strings; | |
4 | with lib.lists; | |
5 | with lib.trivial; | |
6 | let | |
7 | pad = width: str: let | |
8 | padWidth = width - stringLength str; | |
9 | padding = concatStrings (genList (const " ") padWidth); | |
10 | in str + optionalString (padWidth > 0) padding; | |
11 | toStr = k: v: | |
12 | if k == "check_command" && builtins.isList v | |
13 | then builtins.concatStringsSep "!" v | |
1a64deeb | 14 | else builtins.toString v; |
eb071dd4 IB |
15 | |
16 | toService = service: '' | |
17 | define service { | |
18 | ${builtins.concatStringsSep "\n" (mapAttrsToList (k: v: | |
19 | " ${pad 30 k} ${toStr k v}" | |
1a64deeb | 20 | ) (filterAttrs (k: v: ! hasPrefix "__passive_" k) service))} |
eb071dd4 IB |
21 | } |
22 | ''; | |
23 | toServices = services: builtins.concatStringsSep "\n" (map toService services); | |
24 | ||
25 | toCommand = k: v: '' | |
26 | define command { | |
27 | ${pad 30 "command_name"} ${k} | |
28 | ${pad 30 "command_line"} ${v} | |
29 | } | |
30 | ''; | |
31 | toCommands = a: builtins.concatStringsSep "\n" (mapAttrsToList toCommand a); | |
32 | ||
33 | toOther = keyname: k: v: '' | |
34 | define ${keyname} { | |
35 | ${pad 30 "${keyname}_name"} ${k} | |
36 | ${builtins.concatStringsSep "\n" (mapAttrsToList (kk: vv: | |
37 | " ${pad 30 kk} ${vv}" | |
38 | ) v)} | |
39 | } | |
40 | ''; | |
171d8e1a IB |
41 | toOtherNoName = keyname: v: '' |
42 | define ${keyname} { | |
43 | ${builtins.concatStringsSep "\n" (mapAttrsToList (kk: vv: | |
44 | " ${pad 30 kk} ${vv}" | |
45 | ) v)} | |
46 | } | |
47 | ''; | |
eb071dd4 | 48 | toOthers = keyname: a: builtins.concatStringsSep "\n" (mapAttrsToList (toOther keyname) a); |
171d8e1a | 49 | toOthersArray = keyname: a: builtins.concatStringsSep "\n" (map (toOtherNoName keyname) a); |
eb071dd4 IB |
50 | |
51 | toTemplate = keyname: k: v: '' | |
52 | define ${keyname} { | |
53 | ${pad 30 "name"} ${k} | |
54 | ${pad 30 "register"} 0 | |
55 | ${builtins.concatStringsSep "\n" (mapAttrsToList (kk: vv: | |
1a64deeb | 56 | " ${pad 30 kk} ${builtins.toString vv}" |
eb071dd4 IB |
57 | ) v)} |
58 | } | |
59 | ''; | |
60 | toTemplates' = keyname: a: builtins.concatStringsSep "\n" (mapAttrsToList (toTemplate keyname) a); | |
61 | toTemplates = v: builtins.concatStringsSep "\n" (mapAttrsToList toTemplates' v); | |
62 | ||
63 | toObjects' = keyname: v: | |
64 | if keyname == "service" | |
65 | then toServices v | |
66 | else if keyname == "command" | |
67 | then toCommands v | |
68 | else if keyname == "templates" | |
69 | then toTemplates v | |
e820134d | 70 | else if builtins.elem keyname ["hostgroup" "host" "contactgroup" "contact" "timeperiod" "servicegroup"] |
eb071dd4 | 71 | then toOthers keyname v |
1a64deeb | 72 | else if builtins.elem keyname ["servicedependency" "hostdependency"] |
171d8e1a | 73 | then toOthersArray keyname v |
1a64deeb | 74 | else builtins.trace ("Warning: unknown object type " + keyname) ""; |
eb071dd4 IB |
75 | toObjects = v: builtins.concatStringsSep "\n" (mapAttrsToList toObjects' v); |
76 | in | |
77 | toObjects |