Просмотр исходного кода

fix(plugins): fix load plugin generate hocon configs fail

Turtle 4 лет назад
Родитель
Сommit
bc71a1e2c6
1 измененных файлов с 15 добавлено и 6 удалено
  1. 15 6
      apps/emqx/src/emqx_plugins.erl

+ 15 - 6
apps/emqx/src/emqx_plugins.erl

@@ -175,7 +175,7 @@ load_ext_plugin(PluginDir) ->
               end,
               end,
     ok = load_plugin_app(AppName, Ebin),
     ok = load_plugin_app(AppName, Ebin),
     try
     try
-        ok = generate_configs(AppName)
+        ok = generate_configs(AppName, PluginDir)
     catch
     catch
         throw : {conf_file_not_found, ConfFile} ->
         throw : {conf_file_not_found, ConfFile} ->
             %% this is maybe a dependency of an external plugin
             %% this is maybe a dependency of an external plugin
@@ -367,8 +367,16 @@ funlog(Key, Value) ->
     ?LOG(info, "~s = ~p", [string:join(Key, "."), Value]).
     ?LOG(info, "~s = ~p", [string:join(Key, "."), Value]).
 
 
 generate_configs(App) ->
 generate_configs(App) ->
-    PluginConfDir = filename:join([code:lib_dir(App), "etc"]),
-    PluginSchemaDir = filename:join([code:lib_dir(App), "priv"]),
+    PluginConfDir = emqx:get_env(plugins_etc_dir),
+    PluginSchemaDir = code:priv_dir(App),
+    generate_configs(App, PluginConfDir, PluginSchemaDir).
+
+generate_configs(App, PluginDir) ->
+    PluginConfDir = filename:join([PluginDir, "etc"]),
+    PluginSchemaDir = filename:join([PluginDir, "priv"]),
+    generate_configs(App, PluginConfDir, PluginSchemaDir).
+
+generate_configs(App, PluginConfDir, PluginSchemaDir) ->
     ConfigFile = filename:join([PluginConfDir, App]) ++ ".config",
     ConfigFile = filename:join([PluginConfDir, App]) ++ ".config",
     case filelib:is_file(ConfigFile) of
     case filelib:is_file(ConfigFile) of
         true ->
         true ->
@@ -410,13 +418,14 @@ do_generate_hocon_configs(App, ConfName, SchemaFile) ->
     SchemaMod = lists:concat([App, "_schema"]),
     SchemaMod = lists:concat([App, "_schema"]),
     case {filelib:is_file(ConfName), filelib:is_file(SchemaFile)} of
     case {filelib:is_file(ConfName), filelib:is_file(SchemaFile)} of
         {true, true} ->
         {true, true} ->
-            {ok, RawConfig} = hocon:load(ConfName),
-            Config = hocon_schema:check_plain(list_to_atom(SchemaMod), RawConfig, #{atom_key => true}),
+            {ok, RawConfig} = hocon:load(ConfName, #{format => richmap}),
+            Config = hocon_schema:check(list_to_atom(SchemaMod), RawConfig, #{atom_key => true,
+                                                                              return_plain => true}),
             emqx_config_handler:update_config(emqx_config_handler, Config);
             emqx_config_handler:update_config(emqx_config_handler, Config);
         {true, false} ->
         {true, false} ->
             error({schema_not_found, [SchemaFile]});
             error({schema_not_found, [SchemaFile]});
         {false, true} ->
         {false, true} ->
-            error({config_not_found, [SchemaFile]});
+            error({config_not_found, [ConfName]});
         {false, false} ->
         {false, false} ->
             error({conf_and_schema_not_found, [ConfName, SchemaFile]})
             error({conf_and_schema_not_found, [ConfName, SchemaFile]})
     end.
     end.