diff --git a/apps/emqx_bridge/src/emqx_action_info.erl b/apps/emqx_bridge/src/emqx_action_info.erl index 9376eeef3..7d82f76d2 100644 --- a/apps/emqx_bridge/src/emqx_action_info.erl +++ b/apps/emqx_bridge/src/emqx_action_info.erl @@ -26,6 +26,7 @@ bridge_v1_type_to_action_type/1, is_action_type/1, registered_schema_modules/0, + connector_action_config_to_bridge_v1_config/2, connector_action_config_to_bridge_v1_config/3, has_custom_connector_action_config_to_bridge_v1_config/1, bridge_v1_config_to_connector_config/2, @@ -168,8 +169,22 @@ has_custom_connector_action_config_to_bridge_v1_config(ActionOrBridgeType) -> connector_action_config_to_bridge_v1_config(ActionOrBridgeType, ConnectorConfig, ActionConfig) -> Module = get_action_info_module(ActionOrBridgeType), - %% should only be called if defined - Module:connector_action_config_to_bridge_v1_config(ConnectorConfig, ActionConfig). + case erlang:function_exported(Module, connector_action_config_to_bridge_v1_config, 2) of + true -> + Module:connector_action_config_to_bridge_v1_config(ConnectorConfig, ActionConfig); + false -> + connector_action_config_to_bridge_v1_config(ConnectorConfig, ActionConfig) + end. + +connector_action_config_to_bridge_v1_config(ConnectorConfig, ActionConfig) -> + Merged = emqx_utils_maps:deep_merge( + maps:without( + [<<"connector">>], + emqx_utils_maps:unindent(<<"parameters">>, ActionConfig) + ), + emqx_utils_maps:unindent(<<"parameters">>, ConnectorConfig) + ), + maps:without([<<"description">>], Merged). has_custom_bridge_v1_config_to_connector_config(ActionOrBridgeType) -> Module = get_action_info_module(ActionOrBridgeType), diff --git a/apps/emqx_bridge/src/emqx_bridge_v2.erl b/apps/emqx_bridge/src/emqx_bridge_v2.erl index a9aeb0f8e..00d3ef6ec 100644 --- a/apps/emqx_bridge/src/emqx_bridge_v2.erl +++ b/apps/emqx_bridge/src/emqx_bridge_v2.erl @@ -1112,40 +1112,25 @@ bridge_v1_lookup_and_transform(ActionType, Name) -> not_bridge_v1_compatible_error() -> {error, not_bridge_v1_compatible}. +connector_raw_config(Connector, ConnectorType) -> + get_raw_with_defaults(Connector, ConnectorType, <<"connectors">>, emqx_connector_schema). + +action_raw_config(Action, ActionType) -> + get_raw_with_defaults(Action, ActionType, <<"actions">>, emqx_bridge_v2_schema). + +get_raw_with_defaults(Config, Type, TopLevelConf, SchemaModule) -> + RawConfig = maps:get(raw_config, Config), + fill_defaults(Type, RawConfig, TopLevelConf, SchemaModule). + bridge_v1_lookup_and_transform_helper( BridgeV1Type, BridgeName, ActionType, Action, ConnectorType, Connector ) -> - ConnectorRawConfig1 = maps:get(raw_config, Connector), - ConnectorRawConfig2 = fill_defaults( - ConnectorType, - ConnectorRawConfig1, - <<"connectors">>, - emqx_connector_schema + ConnectorRawConfig = connector_raw_config(Connector, ConnectorType), + ActionRawConfig = action_raw_config(Action, ActionType), + BridgeV1Config = emqx_action_info:connector_action_config_to_bridge_v1_config( + BridgeV1Type, ConnectorRawConfig, ActionRawConfig ), - ActionRawConfig1 = maps:get(raw_config, Action), - ActionRawConfig2 = fill_defaults( - ActionType, - ActionRawConfig1, - <<"actions">>, - emqx_bridge_v2_schema - ), - BridgeV1ConfigFinal = - case - emqx_action_info:has_custom_connector_action_config_to_bridge_v1_config(BridgeV1Type) - of - false -> - BridgeV1Config1 = maps:remove(<<"connector">>, ActionRawConfig2), - %% Move parameters to the top level - ParametersMap = maps:get(<<"parameters">>, BridgeV1Config1, #{}), - BridgeV1Config2 = maps:remove(<<"parameters">>, BridgeV1Config1), - BridgeV1Config3 = emqx_utils_maps:deep_merge(BridgeV1Config2, ParametersMap), - emqx_utils_maps:deep_merge(ConnectorRawConfig2, BridgeV1Config3); - true -> - emqx_action_info:connector_action_config_to_bridge_v1_config( - BridgeV1Type, ConnectorRawConfig2, ActionRawConfig2 - ) - end, - BridgeV1Tmp = maps:put(raw_config, BridgeV1ConfigFinal, Action), + BridgeV1Tmp = maps:put(raw_config, BridgeV1Config, Action), BridgeV1 = maps:remove(status, BridgeV1Tmp), BridgeV2Status = maps:get(status, Action, undefined), BridgeV2Error = maps:get(error, Action, undefined), diff --git a/apps/emqx_bridge_mongodb/src/emqx_bridge_mongodb_action_info.erl b/apps/emqx_bridge_mongodb/src/emqx_bridge_mongodb_action_info.erl index be60959e8..060e6a17a 100644 --- a/apps/emqx_bridge_mongodb/src/emqx_bridge_mongodb_action_info.erl +++ b/apps/emqx_bridge_mongodb/src/emqx_bridge_mongodb_action_info.erl @@ -10,7 +10,6 @@ -export([ bridge_v1_config_to_action_config/2, bridge_v1_config_to_connector_config/1, - connector_action_config_to_bridge_v1_config/2, action_type_name/0, bridge_v1_type_name/0, connector_type_name/0, @@ -26,22 +25,6 @@ -define(SCHEMA_MODULE, emqx_bridge_mongodb). -connector_action_config_to_bridge_v1_config( - #{<<"parameters">> := #{<<"mongo_type">> := MongoType}} = ConnectorConfig, - ActionConfig -) -> - MergedConfig = - emqx_utils_maps:deep_merge( - maps:without( - [<<"connector">>], - emqx_utils_maps:unindent(<<"parameters">>, ActionConfig) - ), - emqx_utils_maps:unindent(<<"parameters">>, ConnectorConfig) - ), - BridgeV1Type = v1_type(MongoType), - BridgeV1Keys = schema_keys(BridgeV1Type), - maps:with(BridgeV1Keys, MergedConfig). - bridge_v1_config_to_action_config(BridgeV1Config, ConnectorName) -> ActionTopLevelKeys = schema_keys(mongodb_action), ActionParametersKeys = schema_keys(action_parameters),