fix(exhook): fix the server config format

This commit is contained in:
JianBo He 2021-08-05 17:50:09 +08:00
parent 31d4f72d16
commit 183a65d263
7 changed files with 48 additions and 24 deletions

View File

@ -3,12 +3,14 @@
##====================================================================
exhook: {
server.default: {
url: "http://127.0.0.1:9000"
#ssl: {
# cacertfile: "{{ platform_etc_dir }}/certs/cacert.pem"
# certfile: "{{ platform_etc_dir }}/certs/cert.pem"
# keyfile: "{{ platform_etc_dir }}/certs/key.pem"
#}
}
servers: [
# { name: "default"
# url: "http://127.0.0.1:9000"
# #ssl: {
# # cacertfile: "{{ platform_etc_dir }}/certs/cacert.pem"
# # certfile: "{{ platform_etc_dir }}/certs/cert.pem"
# # keyfile: "{{ platform_etc_dir }}/certs/key.pem"
# #}
# }
]
}

View File

@ -65,10 +65,14 @@ stop(_State) ->
%%--------------------------------------------------------------------
load_all_servers() ->
_ = maps:map(fun(Name, Options) ->
load_server(Name, Options)
end, emqx_config:get([exhook, server])),
ok.
try
lists:foreach(fun(#{name := Name} = Options) ->
load_server(Name, maps:remove(name, Options))
end, emqx_config:get([exhook, servers]))
catch
_Class : _Reason ->
ok
end, ok.
unload_all_servers() ->
emqx_exhook:disable_all().

View File

@ -30,7 +30,7 @@ cli(["server", "list"]) ->
cli(["server", "enable", Name0]) ->
if_enabled(fun() ->
Name = list_to_atom(Name0),
case maps:get(Name, emqx_config:get([exhook, server]), undefined) of
case find_server_options(Name) of
undefined ->
emqx_ctl:print("not_found~n");
Opts ->
@ -59,6 +59,14 @@ print(ok) ->
print({error, Reason}) ->
emqx_ctl:print("~p~n", [Reason]).
find_server_options(Name) ->
Ls = emqx_config:get([exhook, servers]),
case [ E || E = #{name := N} <- Ls, N =:= Name] of
[] -> undefined;
[Options] ->
maps:remove(name, Options)
end.
%%--------------------------------------------------------------------
%% Internal funcs
%%--------------------------------------------------------------------

View File

@ -29,13 +29,11 @@
-export([structs/0, fields/1]).
-export([t/1, t/3, t/4, ref/1]).
structs() -> [server].
structs() -> [servers].
fields(server) ->
[{"$name", t(ref(server_structs))}];
fields(server_structs) ->
[ {url, t(string(), "emqx_exhook.url", "")}
fields(servers) ->
[ {name, string()}
, {url, string()}
, {ssl, t(ref(ssl_conf_group))}
];

View File

@ -23,7 +23,13 @@
-include_lib("common_test/include/ct.hrl").
-define(CONF_DEFAULT, <<"
exhook: { server.default: { url: \"http://127.0.0.1:9000\" } }
exhook: {
servers: [
{ name: \"default\"
url: \"http://127.0.0.1:9000\"
}
]
}
">>).
%%--------------------------------------------------------------------
@ -49,8 +55,8 @@ end_per_suite(_Cfg) ->
t_noserver_nohook(_) ->
emqx_exhook:disable(default),
?assertEqual([], loaded_exhook_hookpoints()),
Opts = emqx_config:get([exhook, server, default]),
ok = emqx_exhook:enable(default, Opts),
[#{name := Name} = Opts] = emqx_config:get([exhook, servers]),
ok = emqx_exhook:enable(Name, Opts),
?assertNotEqual([], loaded_exhook_hookpoints()).
t_cli_list(_) ->

View File

@ -31,7 +31,13 @@
]).
-define(CONF_DEFAULT, <<"
exhook: { server.default: { url: \"http://127.0.0.1:9000\" } }
exhook: {
servers: [
{ name: \"default\"
url: \"http://127.0.0.1:9000\"
}
]
}
">>).
-define(ALL(Vars, Types, Exprs),

View File

@ -267,7 +267,7 @@ relx_apps(ReleaseType) ->
, emqx_authn
, emqx_authz
, emqx_gateway
, {emqx_exhook, load}
, emqx_exhook
, emqx_data_bridge
, emqx_rule_engine
, emqx_rule_actions