refactor: only apply environment variables on base config
This commit is contained in:
parent
a681079ba7
commit
5525cb3262
|
@ -270,28 +270,37 @@ init_load(SchemaMod, Conf) when is_list(Conf) orelse is_binary(Conf) ->
|
||||||
end;
|
end;
|
||||||
init_load(SchemaMod, RawConf) when is_map(RawConf) ->
|
init_load(SchemaMod, RawConf) when is_map(RawConf) ->
|
||||||
ok = save_schema_mod_and_names(SchemaMod),
|
ok = save_schema_mod_and_names(SchemaMod),
|
||||||
%% check and save configs
|
%% check configs agains the schema, with environment variables applied on top
|
||||||
{_AppEnvs, CheckedConf} = check_config(SchemaMod, RawConf),
|
{_AppEnvs, CheckedConf} =
|
||||||
|
check_config(SchemaMod, RawConf, #{apply_override_envs => true}),
|
||||||
%% fill default values for raw config
|
%% fill default values for raw config
|
||||||
Opts = #{only_fill_defaults => true,
|
RawConfWithEnvs = merge_envs(SchemaMod, RawConf),
|
||||||
logger => fun(_, _) -> ok end, %% everything should have been logged already
|
|
||||||
nullable => true %% TODO: evil, remove, nullable should be declared in schema
|
|
||||||
},
|
|
||||||
RawConfWithDefaults = hocon_schema:check_plain(SchemaMod, RawConf, Opts),
|
|
||||||
RootNames = get_root_names(),
|
RootNames = get_root_names(),
|
||||||
ok = save_to_config_map(maps:with(get_atom_root_names(), CheckedConf),
|
ok = save_to_config_map(maps:with(get_atom_root_names(), CheckedConf),
|
||||||
maps:with(RootNames, RawConfWithDefaults)).
|
maps:with(RootNames, RawConfWithEnvs)).
|
||||||
|
|
||||||
include_dirs() ->
|
include_dirs() ->
|
||||||
[filename:join(emqx:data_dir(), "configs")].
|
[filename:join(emqx:data_dir(), "configs")].
|
||||||
|
|
||||||
|
merge_envs(SchemaMod, RawConf) ->
|
||||||
|
Opts = #{logger => fun(_, _) -> ok end, %% everything should have been logged already when check_config
|
||||||
|
nullable => true, %% TODO: evil, remove, nullable should be declared in schema
|
||||||
|
format => map,
|
||||||
|
apply_override_envs => true
|
||||||
|
},
|
||||||
|
hocon_schema:merge_env_overrides(SchemaMod, RawConf, all, Opts).
|
||||||
|
|
||||||
-spec check_config(module(), raw_config()) -> {AppEnvs, CheckedConf}
|
-spec check_config(module(), raw_config()) -> {AppEnvs, CheckedConf}
|
||||||
when AppEnvs :: app_envs(), CheckedConf :: config().
|
when AppEnvs :: app_envs(), CheckedConf :: config().
|
||||||
check_config(SchemaMod, RawConf) ->
|
check_config(SchemaMod, RawConf) ->
|
||||||
Opts = #{return_plain => true,
|
check_config(SchemaMod, RawConf, #{}).
|
||||||
nullable => true, %% TODO: evil, remove, nullable should be declared in schema
|
|
||||||
format => map
|
check_config(SchemaMod, RawConf, Opts0) ->
|
||||||
},
|
Opts1 = #{return_plain => true,
|
||||||
|
nullable => true, %% TODO: evil, remove, nullable should be declared in schema
|
||||||
|
format => map
|
||||||
|
},
|
||||||
|
Opts = maps:merge(Opts0, Opts1),
|
||||||
{AppEnvs, CheckedConf} =
|
{AppEnvs, CheckedConf} =
|
||||||
hocon_schema:map_translate(SchemaMod, RawConf, Opts),
|
hocon_schema:map_translate(SchemaMod, RawConf, Opts),
|
||||||
{AppEnvs, emqx_map_lib:unsafe_atom_key_map(CheckedConf)}.
|
{AppEnvs, emqx_map_lib:unsafe_atom_key_map(CheckedConf)}.
|
||||||
|
|
|
@ -182,12 +182,12 @@ check_parameter([{Name, Type} | Spec], Bindings, QueryStr, Module, BindingsAcc,
|
||||||
Schema = ?INIT_SCHEMA#{roots => [{Name, Type}]},
|
Schema = ?INIT_SCHEMA#{roots => [{Name, Type}]},
|
||||||
case hocon_schema:field_schema(Type, in) of
|
case hocon_schema:field_schema(Type, in) of
|
||||||
path ->
|
path ->
|
||||||
Option = #{atom_key => true, override_env => false},
|
Option = #{atom_key => true},
|
||||||
NewBindings = hocon_schema:check_plain(Schema, Bindings, Option),
|
NewBindings = hocon_schema:check_plain(Schema, Bindings, Option),
|
||||||
NewBindingsAcc = maps:merge(BindingsAcc, NewBindings),
|
NewBindingsAcc = maps:merge(BindingsAcc, NewBindings),
|
||||||
check_parameter(Spec, Bindings, QueryStr, Module, NewBindingsAcc, QueryStrAcc);
|
check_parameter(Spec, Bindings, QueryStr, Module, NewBindingsAcc, QueryStrAcc);
|
||||||
query ->
|
query ->
|
||||||
Option = #{override_env => false},
|
Option = #{},
|
||||||
NewQueryStr = hocon_schema:check_plain(Schema, QueryStr, Option),
|
NewQueryStr = hocon_schema:check_plain(Schema, QueryStr, Option),
|
||||||
NewQueryStrAcc = maps:merge(QueryStrAcc, NewQueryStr),
|
NewQueryStrAcc = maps:merge(QueryStrAcc, NewQueryStr),
|
||||||
check_parameter(Spec, Bindings, QueryStr, Module,BindingsAcc, NewQueryStrAcc)
|
check_parameter(Spec, Bindings, QueryStr, Module,BindingsAcc, NewQueryStrAcc)
|
||||||
|
@ -201,7 +201,7 @@ check_request_body(#{body := Body}, Schema, Module, CheckFun, true) ->
|
||||||
_ -> Type0
|
_ -> Type0
|
||||||
end,
|
end,
|
||||||
NewSchema = ?INIT_SCHEMA#{roots => [{root, Type}]},
|
NewSchema = ?INIT_SCHEMA#{roots => [{root, Type}]},
|
||||||
Option = #{override_env => false, nullable => true},
|
Option = #{nullable => true},
|
||||||
#{<<"root">> := NewBody} = CheckFun(NewSchema, #{<<"root">> => Body}, Option),
|
#{<<"root">> := NewBody} = CheckFun(NewSchema, #{<<"root">> => Body}, Option),
|
||||||
NewBody;
|
NewBody;
|
||||||
%% TODO not support nest object check yet, please use ref!
|
%% TODO not support nest object check yet, please use ref!
|
||||||
|
@ -214,7 +214,7 @@ check_request_body(#{body := Body}, Schema, Module, CheckFun, true) ->
|
||||||
check_request_body(#{body := Body}, Spec, _Module, CheckFun, false) ->
|
check_request_body(#{body := Body}, Spec, _Module, CheckFun, false) ->
|
||||||
lists:foldl(fun({Name, Type}, Acc) ->
|
lists:foldl(fun({Name, Type}, Acc) ->
|
||||||
Schema = ?INIT_SCHEMA#{roots => [{Name, Type}]},
|
Schema = ?INIT_SCHEMA#{roots => [{Name, Type}]},
|
||||||
maps:merge(Acc, CheckFun(Schema, Body, #{override_env => false}))
|
maps:merge(Acc, CheckFun(Schema, Body, #{}))
|
||||||
end, #{}, Spec).
|
end, #{}, Spec).
|
||||||
|
|
||||||
%% tags, description, summary, security, deprecated
|
%% tags, description, summary, security, deprecated
|
||||||
|
|
Loading…
Reference in New Issue