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 1dd0a55ed..66520df75 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 6a1cb7fbc..ee2dbafa7 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 e144f332d..514eb6988 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 a63249fa2..4ded55910 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 dcae031eb..9c647c62d 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 a4d956d78..009eb75e6 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 d74ff40a1..061543b2b 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 091b84196..7d506b9c8 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 b043ebacd..ad28d0251 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 000000000..c29edca8b --- /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 fe315b5d7..af4251328 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 d9c9470eb..3ffcb1a6a 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 66520df75..33d027c19 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,