]>
Commit | Line | Data |
---|---|---|
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 | |
14 | else builtins.toString v; | |
15 | ||
16 | toService = service: '' | |
17 | define service { | |
18 | ${builtins.concatStringsSep "\n" (mapAttrsToList (k: v: | |
19 | " ${pad 30 k} ${toStr k v}" | |
20 | ) (filterAttrs (k: v: ! hasPrefix "__passive_" k) service))} | |
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 | ''; | |
41 | toOtherNoName = keyname: v: '' | |
42 | define ${keyname} { | |
43 | ${builtins.concatStringsSep "\n" (mapAttrsToList (kk: vv: | |
44 | " ${pad 30 kk} ${vv}" | |
45 | ) v)} | |
46 | } | |
47 | ''; | |
48 | toOthers = keyname: a: builtins.concatStringsSep "\n" (mapAttrsToList (toOther keyname) a); | |
49 | toOthersArray = keyname: a: builtins.concatStringsSep "\n" (map (toOtherNoName keyname) a); | |
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: | |
56 | " ${pad 30 kk} ${builtins.toString vv}" | |
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 | |
70 | else if builtins.elem keyname ["hostgroup" "host" "contactgroup" "contact" "timeperiod" "servicegroup"] | |
71 | then toOthers keyname v | |
72 | else if builtins.elem keyname ["servicedependency" "hostdependency"] | |
73 | then toOthersArray keyname v | |
74 | else builtins.trace ("Warning: unknown object type " + keyname) ""; | |
75 | toObjects = v: builtins.concatStringsSep "\n" (mapAttrsToList toObjects' v); | |
76 | in | |
77 | toObjects |