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

feat(connector): allow delegate `pre_config_update` to impls

Andrew Mayorov 1 год назад
Родитель
Сommit
c17c788438
1 измененных файлов с 13 добавлено и 4 удалено
  1. 13 4
      apps/emqx_connector/src/emqx_connector.erl

+ 13 - 4
apps/emqx_connector/src/emqx_connector.erl

@@ -126,19 +126,28 @@ pre_config_update([?ROOT_KEY, _Type, _Name], Oper, OldConfig) when
 ->
     %% to save the 'enable' to the config files
     {ok, OldConfig#{<<"enable">> => operation_to_enable(Oper)}};
-pre_config_update([?ROOT_KEY, _Type, Name] = Path, Conf = #{}, _OldConfig) ->
+pre_config_update([?ROOT_KEY, _Type, Name] = Path, Conf = #{}, ConfOld) ->
     case validate_connector_name(Name) of
         ok ->
             case emqx_connector_ssl:convert_certs(filename:join(Path), Conf) of
-                {error, Reason} ->
-                    {error, Reason};
                 {ok, ConfNew} ->
-                    {ok, ConfNew}
+                    connector_pre_config_update(Path, ConfNew, ConfOld);
+                {error, Reason} ->
+                    {error, Reason}
             end;
         Error ->
             Error
     end.
 
+connector_pre_config_update([?ROOT_KEY, Type, Name] = Path, ConfNew, ConfOld) ->
+    Mod = emqx_connector_info:config_transform_module(Type),
+    case Mod =/= undefined andalso erlang:function_exported(Mod, pre_config_update, 4) of
+        true ->
+            apply(Mod, pre_config_update, [Path, Name, ConfNew, ConfOld]);
+        false ->
+            {ok, ConfNew}
+    end.
+
 operation_to_enable(disable) -> false;
 operation_to_enable(enable) -> true.