comparison tools/cfgdump.lua @ 11200:bf8f2da84007

Merge 0.11->trunk
author Kim Alvefur <zash@zash.se>
date Thu, 05 Nov 2020 22:31:25 +0100
parents 11f285a439a4
children 08dab7df152b
comparison
equal deleted inserted replaced
11199:6c7c50a4de32 11200:bf8f2da84007
1 #!/usr/bin/env lua
2
3 -- cfgdump.lua prosody.cfg.lua [[host] option]
4
5 local s_format, print = string.format, print;
6 local printf = function(fmt, ...) return print(s_format(fmt, ...)); end
7 local serialization = require"util.serialization";
8 local serialize = serialization.new and serialization.new({ unquoted = true }) or serialization.serialize;
9 local configmanager = require"core.configmanager";
10 local startup = require "util.startup";
11
12 startup.set_function_metatable();
13 local config_filename, onlyhost, onlyoption = ...;
14
15 local ok, _, err = configmanager.load(config_filename or "./prosody.cfg.lua", "lua");
16 assert(ok, err);
17
18 if onlyhost then
19 if not onlyoption then
20 onlyhost, onlyoption = "*", onlyhost;
21 end
22 if onlyhost ~= "*" then
23 local component_module = configmanager.get(onlyhost, "component_module");
24
25 if component_module == "component" then
26 printf("Component %q", onlyhost);
27 elseif component_module then
28 printf("Component %q %q", onlyhost, component_module);
29 else
30 printf("VirtualHost %q", onlyhost);
31 end
32 end
33 printf("%s = %s", onlyoption or "?", serialize(configmanager.get(onlyhost, onlyoption)));
34 return;
35 end
36
37 local config = configmanager.getconfig();
38
39
40 for host, hostcfg in pairs(config) do
41 local fixed = {};
42 for option, value in pairs(hostcfg) do
43 fixed[option] = value;
44 if option:match("ports?$") or option:match("interfaces?$") then
45 if option:match("s$") then
46 if type(value) ~= "table" then
47 fixed[option] = { value };
48 end
49 else
50 if type(value) == "table" and #value > 1 then
51 fixed[option] = nil;
52 fixed[option.."s"] = value;
53 end
54 end
55 end
56 end
57 config[host] = fixed;
58 end
59
60 local globals = config["*"]; config["*"] = nil;
61
62 local function printsection(section)
63 local out, n = {}, 1;
64 for k,v in pairs(section) do
65 out[n], n = s_format("%s = %s", k, serialize(v)), n + 1;
66 end
67 table.sort(out);
68 print(table.concat(out, "\n"));
69 end
70
71 print("-------------- Prosody Exported Configuration File -------------");
72 print();
73 print("------------------------ Global section ------------------------");
74 print();
75 printsection(globals);
76 print();
77
78 local has_components = nil;
79
80 print("------------------------ Virtual hosts -------------------------");
81
82 for host, hostcfg in pairs(config) do
83 setmetatable(hostcfg, nil);
84 hostcfg.defined = nil;
85
86 if hostcfg.component_module == nil then
87 print();
88 printf("VirtualHost %q", host);
89 printsection(hostcfg);
90 else
91 has_components = true
92 end
93 end
94
95 print();
96
97 if has_components then
98 print("------------------------- Components ---------------------------");
99
100 for host, hostcfg in pairs(config) do
101 local component_module = hostcfg.component_module;
102 hostcfg.component_module = nil;
103
104 if component_module then
105 print();
106 if component_module == "component" then
107 printf("Component %q", host);
108 else
109 printf("Component %q %q", host, component_module);
110 hostcfg.component_module = nil;
111 hostcfg.load_global_modules = nil;
112 end
113 printsection(hostcfg);
114 end
115 end
116 end
117
118 print()
119 print("------------------------- End of File --------------------------");
120