Merge pull request #9547 from emqx/1214-upgrade-to-hocon-0.32.0

1214 upgrade to hocon 0.32.0
This commit is contained in:
Zaiming (Stone) Shi 2022-12-14 19:10:52 +01:00 committed by GitHub
commit 3705ff7a9e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 33 additions and 28 deletions

View File

@ -29,7 +29,7 @@
{esockd, {git, "https://github.com/emqx/esockd", {tag, "5.9.4"}}}, {esockd, {git, "https://github.com/emqx/esockd", {tag, "5.9.4"}}},
{ekka, {git, "https://github.com/emqx/ekka", {tag, "0.13.7"}}}, {ekka, {git, "https://github.com/emqx/ekka", {tag, "0.13.7"}}},
{gen_rpc, {git, "https://github.com/emqx/gen_rpc", {tag, "2.8.1"}}}, {gen_rpc, {git, "https://github.com/emqx/gen_rpc", {tag, "2.8.1"}}},
{hocon, {git, "https://github.com/emqx/hocon.git", {tag, "0.31.2"}}}, {hocon, {git, "https://github.com/emqx/hocon.git", {tag, "0.32.0"}}},
{pbkdf2, {git, "https://github.com/emqx/erlang-pbkdf2.git", {tag, "2.0.4"}}}, {pbkdf2, {git, "https://github.com/emqx/erlang-pbkdf2.git", {tag, "2.0.4"}}},
{recon, {git, "https://github.com/ferd/recon", {tag, "2.5.1"}}}, {recon, {git, "https://github.com/ferd/recon", {tag, "2.5.1"}}},
{snabbkaffe, {git, "https://github.com/kafka4beam/snabbkaffe.git", {tag, "1.0.0"}}} {snabbkaffe, {git, "https://github.com/kafka4beam/snabbkaffe.git", {tag, "1.0.0"}}}

View File

@ -402,6 +402,7 @@ merge_envs(SchemaMod, RawConf) ->
required => false, required => false,
format => map, format => map,
apply_override_envs => true, apply_override_envs => true,
remove_env_meta => true,
check_lazy => true check_lazy => true
}, },
hocon_tconf:merge_env_overrides(SchemaMod, RawConf, all, Opts). hocon_tconf:merge_env_overrides(SchemaMod, RawConf, all, Opts).
@ -575,10 +576,10 @@ load_hocon_file(FileName, LoadType) ->
end. end.
do_get_raw(Path) -> do_get_raw(Path) ->
hocon_tconf:remove_env_meta(do_get(?RAW_CONF, Path)). do_get(?RAW_CONF, Path).
do_get_raw(Path, Default) -> do_get_raw(Path, Default) ->
hocon_tconf:remove_env_meta(do_get(?RAW_CONF, Path, Default)). do_get(?RAW_CONF, Path, Default).
do_get(Type, KeyPath) -> do_get(Type, KeyPath) ->
Ref = make_ref(), Ref = make_ref(),

View File

@ -39,12 +39,15 @@ providers() ->
{{scram, built_in_database}, emqx_enhanced_authn_scram_mnesia} {{scram, built_in_database}, emqx_enhanced_authn_scram_mnesia}
]. ].
check_configs(C) when is_map(C) -> check_configs(CM) when is_map(CM) ->
check_configs([C]); check_configs([CM]);
check_configs([]) -> check_configs(CL) ->
check_configs(CL, 1).
check_configs([], _Nth) ->
[]; [];
check_configs([Config | Configs]) -> check_configs([Config | Configs], Nth) ->
[check_config(Config) | check_configs(Configs)]. [check_config(Config, #{id_for_log => Nth}) | check_configs(Configs, Nth + 1)].
check_config(Config) -> check_config(Config) ->
check_config(Config, #{}). check_config(Config, #{}).
@ -55,15 +58,16 @@ check_config(Config, Opts) ->
#{?CONF_NS_BINARY := WithDefaults} -> WithDefaults #{?CONF_NS_BINARY := WithDefaults} -> WithDefaults
end. end.
do_check_config(#{<<"mechanism">> := Mec} = Config, Opts) -> do_check_config(#{<<"mechanism">> := Mec0} = Config, Opts) ->
Mec = atom(Mec0, #{error => unknown_mechanism}),
Key = Key =
case maps:get(<<"backend">>, Config, false) of case maps:get(<<"backend">>, Config, false) of
false -> atom(Mec); false -> Mec;
Backend -> {atom(Mec), atom(Backend)} Backend -> {Mec, atom(Backend, #{error => unknown_backend})}
end, end,
case lists:keyfind(Key, 1, providers()) of case lists:keyfind(Key, 1, providers()) of
false -> false ->
throw({unknown_handler, Key}); throw(#{error => unknown_authn_provider, which => Key});
{_, ProviderModule} -> {_, ProviderModule} ->
hocon_tconf:check_plain( hocon_tconf:check_plain(
ProviderModule, ProviderModule,
@ -71,22 +75,22 @@ do_check_config(#{<<"mechanism">> := Mec} = Config, Opts) ->
Opts#{atom_key => true} Opts#{atom_key => true}
) )
end; end;
do_check_config(Config, _Opts) when is_map(Config) -> do_check_config(Config, Opts) when is_map(Config) ->
throw({invalid_config, "mechanism_field_required", Config}); throw(#{
do_check_config(RawConf, Opts) -> error => invalid_config,
%% authentication conf is lazy type, when it comes from ENV, it is a string which => maps:get(id_for_log, Opts, unknown),
%% EMQX_AUTHENTICATION__1="{mechanism=\"password_based\"...}" reason => "mechanism_field_required"
case hocon:binary(RawConf, Opts) of }).
{ok, Conf} -> do_check_config(Conf, Opts);
{error, Reason} -> throw({invalid_config, Reason})
end.
atom(Bin) -> %% The atoms have to be loaded already,
%% which might be an issue for plugins which are loaded after node boot
%% but they should really manage their own configs in that case.
atom(Bin, ErrorContext) ->
try try
binary_to_existing_atom(Bin, utf8) binary_to_existing_atom(Bin, utf8)
catch catch
_:_ -> _:_ ->
throw({unknown_auth_provider, Bin}) throw(ErrorContext#{value => Bin})
end. end.
-spec get_enabled_authns() -> -spec get_enabled_authns() ->

View File

@ -298,8 +298,8 @@ parse_confs(Type, Name, Conf) when ?IS_BI_DIR_BRIDGE(Type) ->
%% For some drivers that can be used as data-sources, we need to provide a %% For some drivers that can be used as data-sources, we need to provide a
%% hookpoint. The underlying driver will run `emqx_hooks:run/3` when it %% hookpoint. The underlying driver will run `emqx_hooks:run/3` when it
%% receives a message from the external database. %% receives a message from the external database.
BName = bridge_id(Type, Name), BId = bridge_id(Type, Name),
Conf#{hookpoint => <<"$bridges/", BName/binary>>, bridge_name => Name}; Conf#{hookpoint => <<"$bridges/", BId/binary>>, bridge_name => Name};
parse_confs(_Type, _Name, Conf) -> parse_confs(_Type, _Name, Conf) ->
Conf. Conf.

View File

@ -1,5 +1,5 @@
{erl_opts, [debug_info]}. {erl_opts, [debug_info]}.
{deps, [ {hocon, {git, "https://github.com/emqx/hocon.git", {tag, "0.31.2"}}} {deps, [ {hocon, {git, "https://github.com/emqx/hocon.git", {tag, "0.32.0"}}}
, {wolff, {git, "https://github.com/kafka4beam/wolff.git", {tag, "1.7.0"}}} , {wolff, {git, "https://github.com/kafka4beam/wolff.git", {tag, "1.7.0"}}}
, {kafka_protocol, {git, "https://github.com/kafka4beam/kafka_protocol.git", {tag, "4.1.0"}}} , {kafka_protocol, {git, "https://github.com/kafka4beam/kafka_protocol.git", {tag, "4.1.0"}}}
, {brod_gssapi, {git, "https://github.com/kafka4beam/brod_gssapi.git", {tag, "v0.1.0-rc1"}}} , {brod_gssapi, {git, "https://github.com/kafka4beam/brod_gssapi.git", {tag, "v0.1.0-rc1"}}}

View File

@ -67,7 +67,7 @@ defmodule EMQXUmbrella.MixProject do
# in conflict by emqtt and hocon # in conflict by emqtt and hocon
{:getopt, "1.0.2", override: true}, {:getopt, "1.0.2", override: true},
{:snabbkaffe, github: "kafka4beam/snabbkaffe", tag: "1.0.0", override: true}, {:snabbkaffe, github: "kafka4beam/snabbkaffe", tag: "1.0.0", override: true},
{:hocon, github: "emqx/hocon", tag: "0.31.2", override: true}, {:hocon, github: "emqx/hocon", tag: "0.32.0", override: true},
{:emqx_http_lib, github: "emqx/emqx_http_lib", tag: "0.5.1", override: true}, {:emqx_http_lib, github: "emqx/emqx_http_lib", tag: "0.5.1", override: true},
{:esasl, github: "emqx/esasl", tag: "0.2.0"}, {:esasl, github: "emqx/esasl", tag: "0.2.0"},
{:jose, github: "potatosalad/erlang-jose", tag: "1.11.2"}, {:jose, github: "potatosalad/erlang-jose", tag: "1.11.2"},

View File

@ -67,7 +67,7 @@
, {system_monitor, {git, "https://github.com/ieQu1/system_monitor", {tag, "3.0.3"}}} , {system_monitor, {git, "https://github.com/ieQu1/system_monitor", {tag, "3.0.3"}}}
, {getopt, "1.0.2"} , {getopt, "1.0.2"}
, {snabbkaffe, {git, "https://github.com/kafka4beam/snabbkaffe.git", {tag, "1.0.0"}}} , {snabbkaffe, {git, "https://github.com/kafka4beam/snabbkaffe.git", {tag, "1.0.0"}}}
, {hocon, {git, "https://github.com/emqx/hocon.git", {tag, "0.31.2"}}} , {hocon, {git, "https://github.com/emqx/hocon.git", {tag, "0.32.0"}}}
, {emqx_http_lib, {git, "https://github.com/emqx/emqx_http_lib.git", {tag, "0.5.1"}}} , {emqx_http_lib, {git, "https://github.com/emqx/emqx_http_lib.git", {tag, "0.5.1"}}}
, {esasl, {git, "https://github.com/emqx/esasl", {tag, "0.2.0"}}} , {esasl, {git, "https://github.com/emqx/esasl", {tag, "0.2.0"}}}
, {jose, {git, "https://github.com/potatosalad/erlang-jose", {tag, "1.11.2"}}} , {jose, {git, "https://github.com/potatosalad/erlang-jose", {tag, "1.11.2"}}}