feat: add custom callback for creating connector from bridge V1 config

This commit is contained in:
Kjell Winblad 2023-11-20 17:23:51 +01:00
parent 3aa8044475
commit edbfe090c9
2 changed files with 41 additions and 17 deletions

View File

@ -28,6 +28,8 @@
registered_schema_modules/0, registered_schema_modules/0,
connector_action_config_to_bridge_v1_config/3, connector_action_config_to_bridge_v1_config/3,
has_custom_connector_action_config_to_bridge_v1_config/1, has_custom_connector_action_config_to_bridge_v1_config/1,
bridge_v1_config_to_connector_config/2,
has_custom_bridge_v1_config_to_connector_config/1,
bridge_v1_config_to_action_config/3, bridge_v1_config_to_action_config/3,
has_custom_bridge_v1_config_to_action_config/1, has_custom_bridge_v1_config_to_action_config/1,
transform_bridge_v1_config_to_action_config/4 transform_bridge_v1_config_to_action_config/4
@ -41,6 +43,8 @@
-callback connector_action_config_to_bridge_v1_config( -callback connector_action_config_to_bridge_v1_config(
ConnectorConfig :: map(), ActionConfig :: map() ConnectorConfig :: map(), ActionConfig :: map()
) -> map(). ) -> map().
%% Define this if the automatic config upgrade is not enough for the connector.
-callback bridge_v1_config_to_connector_config(BridgeV1Config :: map()) -> map().
%% Define this if the automatic config upgrade is not enough for the bridge. %% Define this if the automatic config upgrade is not enough for the bridge.
%% If you want to make use of the automatic config upgrade, you can call %% If you want to make use of the automatic config upgrade, you can call
%% emqx_action_info:transform_bridge_v1_config_to_action_config/4 in your %% emqx_action_info:transform_bridge_v1_config_to_action_config/4 in your
@ -51,6 +55,7 @@
-optional_callbacks([ -optional_callbacks([
bridge_v1_type_name/0, bridge_v1_type_name/0,
connector_action_config_to_bridge_v1_config/2, connector_action_config_to_bridge_v1_config/2,
bridge_v1_config_to_connector_config/1,
bridge_v1_config_to_action_config/2 bridge_v1_config_to_action_config/2
]). ]).
@ -139,6 +144,15 @@ connector_action_config_to_bridge_v1_config(ActionOrBridgeType, ConnectorConfig,
%% should only be called if defined %% should only be called if defined
Module:connector_action_config_to_bridge_v1_config(ConnectorConfig, ActionConfig). Module:connector_action_config_to_bridge_v1_config(ConnectorConfig, ActionConfig).
has_custom_bridge_v1_config_to_connector_config(ActionOrBridgeType) ->
Module = get_action_info_module(ActionOrBridgeType),
erlang:function_exported(Module, bridge_v1_config_to_connector_config, 1).
bridge_v1_config_to_connector_config(ActionOrBridgeType, BridgeV1Config) ->
Module = get_action_info_module(ActionOrBridgeType),
%% should only be called if defined
Module:bridge_v1_config_to_connector_config(BridgeV1Config).
has_custom_bridge_v1_config_to_action_config(ActionOrBridgeType) -> has_custom_bridge_v1_config_to_action_config(ActionOrBridgeType) ->
Module = get_action_info_module(ActionOrBridgeType), Module = get_action_info_module(ActionOrBridgeType),
erlang:function_exported(Module, bridge_v1_config_to_action_config, 2). erlang:function_exported(Module, bridge_v1_config_to_action_config, 2).

View File

@ -103,8 +103,17 @@ bridge_configs_to_transform(
split_bridge_to_connector_and_action( split_bridge_to_connector_and_action(
{ConnectorsMap, {BridgeType, BridgeName, BridgeV1Conf, ConnectorFields, PreviousRawConfig}} {ConnectorsMap, {BridgeType, BridgeName, BridgeV1Conf, ConnectorFields, PreviousRawConfig}}
) -> ) ->
ConnectorMap =
case emqx_action_info:has_custom_bridge_v1_config_to_connector_config(BridgeType) of
true ->
emqx_action_info:bridge_v1_config_to_connector_config(
BridgeType, BridgeV1Conf
);
false ->
%% We do an automatic transfomation to get the connector config
%% if the callback is not defined.
%% Get connector fields from bridge config %% Get connector fields from bridge config
ConnectorMap = lists:foldl( lists:foldl(
fun({ConnectorFieldName, _Spec}, ToTransformSoFar) -> fun({ConnectorFieldName, _Spec}, ToTransformSoFar) ->
case maps:is_key(to_bin(ConnectorFieldName), BridgeV1Conf) of case maps:is_key(to_bin(ConnectorFieldName), BridgeV1Conf) of
true -> true ->
@ -120,7 +129,8 @@ split_bridge_to_connector_and_action(
end, end,
#{}, #{},
ConnectorFields ConnectorFields
), )
end,
%% Generate a connector name, if needed. Avoid doing so if there was a previous config. %% Generate a connector name, if needed. Avoid doing so if there was a previous config.
ConnectorName = ConnectorName =
case PreviousRawConfig of case PreviousRawConfig of