From ab66986f16fd69eaa0239ec2de96d9520cc21f52 Mon Sep 17 00:00:00 2001 From: "Zaiming (Stone) Shi" Date: Tue, 16 Jan 2024 13:29:49 +0100 Subject: [PATCH 1/3] feat: add 'tags' field for action and connector --- apps/emqx/src/emqx_schema.erl | 13 ++++++++++++- apps/emqx_bridge/src/schema/emqx_bridge_schema.erl | 1 + .../src/schema/emqx_bridge_v2_schema.erl | 2 ++ .../src/emqx_bridge_azure_event_hub.erl | 1 + .../src/emqx_bridge_confluent_producer.erl | 1 + .../src/emqx_bridge_http_schema.erl | 2 ++ apps/emqx_bridge_kafka/src/emqx_bridge_kafka.erl | 1 + .../src/emqx_bridge_syskeeper.erl | 1 + .../src/schema/emqx_connector_schema.erl | 1 + changes/ce/feat-12333.en.md | 3 +++ rel/i18n/emqx_schema.hocon | 5 +++++ 11 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 changes/ce/feat-12333.en.md diff --git a/apps/emqx/src/emqx_schema.erl b/apps/emqx/src/emqx_schema.erl index 1dd0a55ed0..66520df752 100644 --- a/apps/emqx/src/emqx_schema.erl +++ b/apps/emqx/src/emqx_schema.erl @@ -167,7 +167,8 @@ client_ssl_opts_schema/1, ciphers_schema/1, tls_versions_schema/1, - description_schema/0 + description_schema/0, + tags_schema/0 ]). -export([password_converter/2, bin_str_converter/2]). -export([authz_fields/0]). @@ -3825,3 +3826,13 @@ description_schema() -> importance => ?IMPORTANCE_LOW } ). + +tags_schema() -> + sc( + hoconsc:array(string()), + #{ + desc => ?DESC(resource_tags), + required => false, + importance => ?IMPORTANCE_LOW + } + ). diff --git a/apps/emqx_bridge/src/schema/emqx_bridge_schema.erl b/apps/emqx_bridge/src/schema/emqx_bridge_schema.erl index 6a1cb7fbc1..ee2dbafa7c 100644 --- a/apps/emqx_bridge/src/schema/emqx_bridge_schema.erl +++ b/apps/emqx_bridge/src/schema/emqx_bridge_schema.erl @@ -126,6 +126,7 @@ common_bridge_fields() -> default => true } )}, + {tags, emqx_schema:tags_schema()}, %% Create v2 connector then usr v1 /bridges_probe api to test connector %% /bridges_probe should pass through v2 connector's description. {description, emqx_schema:description_schema()} diff --git a/apps/emqx_bridge/src/schema/emqx_bridge_v2_schema.erl b/apps/emqx_bridge/src/schema/emqx_bridge_v2_schema.erl index e144f332de..514eb6988d 100644 --- a/apps/emqx_bridge/src/schema/emqx_bridge_v2_schema.erl +++ b/apps/emqx_bridge/src/schema/emqx_bridge_v2_schema.erl @@ -270,6 +270,7 @@ examples(Method) -> top_level_common_action_keys() -> [ <<"connector">>, + <<"tags">>, <<"description">>, <<"enable">>, <<"local_topic">>, @@ -301,6 +302,7 @@ make_consumer_action_schema(ActionParametersRef, Opts) -> mk(binary(), #{ desc => ?DESC(emqx_connector_schema, "connector_field"), required => true })}, + {tags, emqx_schema:tags_schema()}, {description, emqx_schema:description_schema()}, {parameters, ActionParametersRef}, {resource_opts, diff --git a/apps/emqx_bridge_azure_event_hub/src/emqx_bridge_azure_event_hub.erl b/apps/emqx_bridge_azure_event_hub/src/emqx_bridge_azure_event_hub.erl index a63249fa27..4ded55910b 100644 --- a/apps/emqx_bridge_azure_event_hub/src/emqx_bridge_azure_event_hub.erl +++ b/apps/emqx_bridge_azure_event_hub/src/emqx_bridge_azure_event_hub.erl @@ -134,6 +134,7 @@ fields(actions) -> mk(binary(), #{ desc => ?DESC(emqx_connector_schema, "connector_field"), required => true })}, + {tags, emqx_schema:tags_schema()}, {description, emqx_schema:description_schema()} ], override_documentations(Fields); diff --git a/apps/emqx_bridge_confluent/src/emqx_bridge_confluent_producer.erl b/apps/emqx_bridge_confluent/src/emqx_bridge_confluent_producer.erl index dcae031eb6..9c647c62d0 100644 --- a/apps/emqx_bridge_confluent/src/emqx_bridge_confluent_producer.erl +++ b/apps/emqx_bridge_confluent/src/emqx_bridge_confluent_producer.erl @@ -121,6 +121,7 @@ fields(actions) -> mk(binary(), #{ desc => ?DESC(emqx_connector_schema, "connector_field"), required => true })}, + {tags, emqx_schema:tags_schema()}, {description, emqx_schema:description_schema()} ], override_documentations(Fields); diff --git a/apps/emqx_bridge_http/src/emqx_bridge_http_schema.erl b/apps/emqx_bridge_http/src/emqx_bridge_http_schema.erl index a4d956d78b..009eb75e60 100644 --- a/apps/emqx_bridge_http/src/emqx_bridge_http_schema.erl +++ b/apps/emqx_bridge_http/src/emqx_bridge_http_schema.erl @@ -76,6 +76,7 @@ fields("http_action") -> mk(binary(), #{ desc => ?DESC(emqx_connector_schema, "connector_field"), required => true })}, + {tags, emqx_schema:tags_schema()}, {description, emqx_schema:description_schema()}, %% Note: there's an implicit convention in `emqx_bridge' that, %% for egress bridges with this config, the published messages @@ -175,6 +176,7 @@ basic_config() -> default => true } )}, + {tags, emqx_schema:tags_schema()}, {description, emqx_schema:description_schema()} ] ++ connector_opts(). diff --git a/apps/emqx_bridge_kafka/src/emqx_bridge_kafka.erl b/apps/emqx_bridge_kafka/src/emqx_bridge_kafka.erl index d74ff40a13..061543b2b0 100644 --- a/apps/emqx_bridge_kafka/src/emqx_bridge_kafka.erl +++ b/apps/emqx_bridge_kafka/src/emqx_bridge_kafka.erl @@ -297,6 +297,7 @@ fields(kafka_producer_action) -> mk(binary(), #{ desc => ?DESC(emqx_connector_schema, "connector_field"), required => true })}, + {tags, emqx_schema:tags_schema()}, {description, emqx_schema:description_schema()} ] ++ producer_opts(action); fields(kafka_consumer) -> diff --git a/apps/emqx_bridge_syskeeper/src/emqx_bridge_syskeeper.erl b/apps/emqx_bridge_syskeeper/src/emqx_bridge_syskeeper.erl index 091b84196f..7d506b9c81 100644 --- a/apps/emqx_bridge_syskeeper/src/emqx_bridge_syskeeper.erl +++ b/apps/emqx_bridge_syskeeper/src/emqx_bridge_syskeeper.erl @@ -86,6 +86,7 @@ fields(action) -> fields(config) -> [ {enable, mk(boolean(), #{desc => ?DESC("config_enable"), default => true})}, + {tags, emqx_schema:tags_schema()}, {description, emqx_schema:description_schema()}, {connector, mk(binary(), #{ diff --git a/apps/emqx_connector/src/schema/emqx_connector_schema.erl b/apps/emqx_connector/src/schema/emqx_connector_schema.erl index b043ebacd3..ad28d02516 100644 --- a/apps/emqx_connector/src/schema/emqx_connector_schema.erl +++ b/apps/emqx_connector/src/schema/emqx_connector_schema.erl @@ -503,6 +503,7 @@ api_fields("put_connector", _Type, Fields) -> common_fields() -> [ {enable, mk(boolean(), #{desc => ?DESC("config_enable"), default => true})}, + {tags, emqx_schema:tags_schema()}, {description, emqx_schema:description_schema()} ]. diff --git a/changes/ce/feat-12333.en.md b/changes/ce/feat-12333.en.md new file mode 100644 index 0000000000..c29edca8b9 --- /dev/null +++ b/changes/ce/feat-12333.en.md @@ -0,0 +1,3 @@ +Add 'tags' field for actions and connectors + +Similar to 'description' field (which is a free text annotation), 'tags' can be used to annotate actions and connectors for filtering/grouping. diff --git a/rel/i18n/emqx_schema.hocon b/rel/i18n/emqx_schema.hocon index fe315b5d76..af4251328b 100644 --- a/rel/i18n/emqx_schema.hocon +++ b/rel/i18n/emqx_schema.hocon @@ -1570,6 +1570,11 @@ description.label: description.desc: """Descriptive text.""" +resource_tags.label: +"""Tags""" +resource_tags.desc: +"""Tags to annotate this config entry.""" + session_persistence_enable.desc: """Use durable storage for client sessions persistence. If enabled, sessions configured to outlive client connections, along with their corresponding messages, will be durably stored and survive broker downtime.""" From 1fe1a62fe2785fedab162654376c99f0adec9900 Mon Sep 17 00:00:00 2001 From: "Zaiming (Stone) Shi" Date: Tue, 16 Jan 2024 14:00:34 +0100 Subject: [PATCH 2/3] test: fix already exported function warning --- apps/emqx/test/emqx_common_test_helpers.erl | 2 -- 1 file changed, 2 deletions(-) diff --git a/apps/emqx/test/emqx_common_test_helpers.erl b/apps/emqx/test/emqx_common_test_helpers.erl index d9c9470eb2..3ffcb1a6af 100644 --- a/apps/emqx/test/emqx_common_test_helpers.erl +++ b/apps/emqx/test/emqx_common_test_helpers.erl @@ -50,8 +50,6 @@ client_ssl/1, client_mtls/0, client_mtls/1, - ssl_verify_fun_allow_any_host/0, - ssl_verify_fun_allow_any_host_impl/3, ensure_mnesia_stopped/0, ensure_quic_listener/2, ensure_quic_listener/3, From 01d52e37c44303dfb01b888fb960f7473c5c9ea6 Mon Sep 17 00:00:00 2001 From: "Zaiming (Stone) Shi" Date: Tue, 16 Jan 2024 17:35:22 +0100 Subject: [PATCH 3/3] fix: resource tag type should be binary string Co-authored-by: Thales Macedo Garitezi --- apps/emqx/src/emqx_schema.erl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/emqx/src/emqx_schema.erl b/apps/emqx/src/emqx_schema.erl index 66520df752..33d027c19a 100644 --- a/apps/emqx/src/emqx_schema.erl +++ b/apps/emqx/src/emqx_schema.erl @@ -3829,7 +3829,7 @@ description_schema() -> tags_schema() -> sc( - hoconsc:array(string()), + hoconsc:array(binary()), #{ desc => ?DESC(resource_tags), required => false,