diff --git a/.ci/fvt_tests/http_server/rebar.config b/.ci/fvt_tests/http_server/rebar.config index 47ad135d1..8edd69fb6 100644 --- a/.ci/fvt_tests/http_server/rebar.config +++ b/.ci/fvt_tests/http_server/rebar.config @@ -1,12 +1,11 @@ %% -*- mode: erlang -*- {erl_opts, [debug_info]}. -{deps, - [ +{deps, [ {minirest, {git, "https://github.com/emqx/minirest.git", {tag, "1.3.7"}}} - ]}. +]}. {shell, [ - % {config, "config/sys.config"}, + % {config, "config/sys.config"}, {apps, [http_server]} ]}. diff --git a/Makefile b/Makefile index 41ff1b024..c48ceb113 100644 --- a/Makefile +++ b/Makefile @@ -316,9 +316,10 @@ $(foreach tt,$(ALL_ELIXIR_TGZS),$(eval $(call gen-elixir-tgz-target,$(tt)))) .PHONY: fmt fmt: $(REBAR) @$(SCRIPTS)/erlfmt -w 'apps/*/{src,include,priv,test,integration_test}/**/*.{erl,hrl,app.src,eterm}' + @$(SCRIPTS)/erlfmt -w '**/*.escript' --exclude-files '_build/**' + @$(SCRIPTS)/erlfmt -w '**/rebar.config' @$(SCRIPTS)/erlfmt -w 'rebar.config.erl' - @$(SCRIPTS)/erlfmt -w '$(SCRIPTS)/**/*.escript' - @$(SCRIPTS)/erlfmt -w 'bin/**/*.escript' + @$(SCRIPTS)/erlfmt -w 'bin/nodetool' @mix format .PHONY: clean-test-cluster-config diff --git a/README-CN.md b/README-CN.md index f989b9bed..84a72912d 100644 --- a/README-CN.md +++ b/README-CN.md @@ -60,7 +60,7 @@ EMQX Cloud 文档:[docs.emqx.com/zh/cloud/latest/](https://docs.emqx.com/zh/cl - 访问 [EMQ 问答社区](https://askemq.com/) 以获取帮助,也可以分享您的想法或项目。 - 添加小助手微信号 `emqmkt`,加入 EMQ 微信技术交流群。 - 加入我们的 [Discord](https://discord.gg/xYGf3fQnES),参于实时讨论。 -- 关注我们的 [bilibili](https://space.bilibili.com/522222081),获取最新物联网技术分享。 +- 关注我们的 [Bilibili](https://space.bilibili.com/522222081),获取最新物联网技术分享。 - 关注我们的 [微博](https://weibo.com/emqtt) 或 [Twitter](https://twitter.com/EMQTech),获取 EMQ 最新资讯。 ## 相关资源 diff --git a/README-RU.md b/README-RU.md index 6cb7fda6a..9f8347e2b 100644 --- a/README-RU.md +++ b/README-RU.md @@ -32,7 +32,7 @@ docker run -d --name emqx -p 1883:1883 -p 8083:8083 -p 8883:8883 -p 8084:8084 -p Чтобы ознакомиться с функциональностью EMQX, пожалуйста, следуйте [руководству по началу работы](https://www.emqx.io/docs/en/v5.0/getting-started/getting-started.html#start-emqx). -#### Запуск кластера EMQX на kubernetes +#### Запуск кластера EMQX на Kubernetes [Документация по EMQX Operator](https://github.com/emqx/emqx-operator/blob/main/docs/en_US/getting-started/getting-started.md). diff --git a/README.md b/README.md index 3fda5999c..622cbfc99 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ docker run -d --name emqx -p 1883:1883 -p 8083:8083 -p 8084:8084 -p 8883:8883 -p Next, please follow the [Deploy with Docker](https://www.emqx.io/docs/en/v5.1/deploy/install-docker.html) guide for further instructions. -#### Run EMQX cluster on kubernetes +#### Run EMQX cluster on Kubernetes Please consult official [EMQX Operator](https://github.com/emqx/emqx-operator/blob/main/docs/en_US/getting-started/getting-started.md) documentation for details. diff --git a/apps/emqx/rebar.config b/apps/emqx/rebar.config index 01b51ed88..3664844a0 100644 --- a/apps/emqx/rebar.config +++ b/apps/emqx/rebar.config @@ -47,8 +47,10 @@ {bbmustache, "1.10.0"}, {emqtt, {git, "https://github.com/emqx/emqtt", {tag, "1.10.0"}}} ]}, - {extra_src_dirs, [{"test", [recursive]}, - {"integration_test", [recursive]}]} + {extra_src_dirs, [ + {"test", [recursive]}, + {"integration_test", [recursive]} + ]} ]}, {standalone_test, [ {deps, [ diff --git a/apps/emqx/src/bpapi/README.md b/apps/emqx/src/bpapi/README.md index 9c4bef959..3b94c6f50 100644 --- a/apps/emqx/src/bpapi/README.md +++ b/apps/emqx/src/bpapi/README.md @@ -137,7 +137,7 @@ to negotiate protocol version: protocol version supported by the remote node `Node`. `emqx_bpapi:supported_version(ProtocolId)` returns maximum protocol version that is supported by all nodes in the cluster. It can -be useful when the protocol involves multicalls or multicasts. +be useful when the protocol involves multi-calls or multi-casts. The business logic can assume that the supported protocol version is not going to change on the remote node, while it is running. So it is diff --git a/apps/emqx/test/emqx_mqtt_protocol_v5_SUITE.erl b/apps/emqx/test/emqx_mqtt_protocol_v5_SUITE.erl index ff248a16a..ee2833a0a 100644 --- a/apps/emqx/test/emqx_mqtt_protocol_v5_SUITE.erl +++ b/apps/emqx/test/emqx_mqtt_protocol_v5_SUITE.erl @@ -585,7 +585,7 @@ t_connack_max_qos_allowed(Config) -> process_flag(trap_exit, false). -t_connack_assigned_clienid(Config) -> +t_connack_assigned_clientid(Config) -> ConnFun = ?config(conn_fun, Config), {ok, Client1} = emqtt:start_link([{proto_ver, v5} | Config]), {ok, _} = emqtt:ConnFun(Client1), diff --git a/apps/emqx_audit/rebar.config b/apps/emqx_audit/rebar.config index fac0f9b07..adba35daf 100644 --- a/apps/emqx_audit/rebar.config +++ b/apps/emqx_audit/rebar.config @@ -1,5 +1,7 @@ +%% -*- mode: erlang; -*- + {erl_opts, [debug_info]}. {deps, [ - {emqx, {path, "../emqx"}}, - {emqx_utils, {path, "../emqx_utils"}} + {emqx, {path, "../emqx"}}, + {emqx_utils, {path, "../emqx_utils"}} ]}. diff --git a/apps/emqx_auth_http/rebar.config b/apps/emqx_auth_http/rebar.config index db2424602..b2f3b05a9 100644 --- a/apps/emqx_auth_http/rebar.config +++ b/apps/emqx_auth_http/rebar.config @@ -1,4 +1,5 @@ %% -*- mode: erlang -*- + {deps, [ {emqx, {path, "../emqx"}}, {emqx_utils, {path, "../emqx_utils"}}, diff --git a/apps/emqx_auth_jwt/rebar.config b/apps/emqx_auth_jwt/rebar.config index db2424602..b2f3b05a9 100644 --- a/apps/emqx_auth_jwt/rebar.config +++ b/apps/emqx_auth_jwt/rebar.config @@ -1,4 +1,5 @@ %% -*- mode: erlang -*- + {deps, [ {emqx, {path, "../emqx"}}, {emqx_utils, {path, "../emqx_utils"}}, diff --git a/apps/emqx_auth_ldap/rebar.config b/apps/emqx_auth_ldap/rebar.config index 261f68cdc..b2f3b05a9 100644 --- a/apps/emqx_auth_ldap/rebar.config +++ b/apps/emqx_auth_ldap/rebar.config @@ -1,6 +1,7 @@ %% -*- mode: erlang -*- + {deps, [ - {emqx, {path, "../emqx"}}, - {emqx_utils, {path, "../emqx_utils"}}, - {emqx_auth, {path, "../emqx_auth"}} - ]}. + {emqx, {path, "../emqx"}}, + {emqx_utils, {path, "../emqx_utils"}}, + {emqx_auth, {path, "../emqx_auth"}} +]}. diff --git a/apps/emqx_auth_mnesia/rebar.config b/apps/emqx_auth_mnesia/rebar.config index db2424602..b2f3b05a9 100644 --- a/apps/emqx_auth_mnesia/rebar.config +++ b/apps/emqx_auth_mnesia/rebar.config @@ -1,4 +1,5 @@ %% -*- mode: erlang -*- + {deps, [ {emqx, {path, "../emqx"}}, {emqx_utils, {path, "../emqx_utils"}}, diff --git a/apps/emqx_auth_mongodb/rebar.config b/apps/emqx_auth_mongodb/rebar.config index db2424602..b2f3b05a9 100644 --- a/apps/emqx_auth_mongodb/rebar.config +++ b/apps/emqx_auth_mongodb/rebar.config @@ -1,4 +1,5 @@ %% -*- mode: erlang -*- + {deps, [ {emqx, {path, "../emqx"}}, {emqx_utils, {path, "../emqx_utils"}}, diff --git a/apps/emqx_auth_mysql/rebar.config b/apps/emqx_auth_mysql/rebar.config index db2424602..b2f3b05a9 100644 --- a/apps/emqx_auth_mysql/rebar.config +++ b/apps/emqx_auth_mysql/rebar.config @@ -1,4 +1,5 @@ %% -*- mode: erlang -*- + {deps, [ {emqx, {path, "../emqx"}}, {emqx_utils, {path, "../emqx_utils"}}, diff --git a/apps/emqx_auth_postgresql/rebar.config b/apps/emqx_auth_postgresql/rebar.config index db2424602..b2f3b05a9 100644 --- a/apps/emqx_auth_postgresql/rebar.config +++ b/apps/emqx_auth_postgresql/rebar.config @@ -1,4 +1,5 @@ %% -*- mode: erlang -*- + {deps, [ {emqx, {path, "../emqx"}}, {emqx_utils, {path, "../emqx_utils"}}, diff --git a/apps/emqx_auth_redis/rebar.config b/apps/emqx_auth_redis/rebar.config index db2424602..b2f3b05a9 100644 --- a/apps/emqx_auth_redis/rebar.config +++ b/apps/emqx_auth_redis/rebar.config @@ -1,4 +1,5 @@ %% -*- mode: erlang -*- + {deps, [ {emqx, {path, "../emqx"}}, {emqx_utils, {path, "../emqx_utils"}}, diff --git a/apps/emqx_bridge/rebar.config b/apps/emqx_bridge/rebar.config index 864c45e9a..475767bbf 100644 --- a/apps/emqx_bridge/rebar.config +++ b/apps/emqx_bridge/rebar.config @@ -1,9 +1,11 @@ +%% -*- mode: erlang; -*- + {erl_opts, [debug_info]}. {deps, [ {emqx, {path, "../emqx"}}, {emqx_utils, {path, "../emqx_utils"}}, {emqx_resource, {path, "../../apps/emqx_resource"}} - ]}. +]}. {shell, [ % {config, "config/sys.config"}, diff --git a/apps/emqx_bridge_azure_event_hub/rebar.config b/apps/emqx_bridge_azure_event_hub/rebar.config index 6169ef8ea..76e1ae0ef 100644 --- a/apps/emqx_bridge_azure_event_hub/rebar.config +++ b/apps/emqx_bridge_azure_event_hub/rebar.config @@ -1,14 +1,16 @@ %% -*- mode: erlang; -*- + {erl_opts, [debug_info]}. -{deps, [ {wolff, {git, "https://github.com/kafka4beam/wolff.git", {tag, "1.9.1"}}} - , {kafka_protocol, {git, "https://github.com/kafka4beam/kafka_protocol.git", {tag, "4.1.3"}}} - , {brod_gssapi, {git, "https://github.com/kafka4beam/brod_gssapi.git", {tag, "v0.1.1"}}} - , {brod, {git, "https://github.com/kafka4beam/brod.git", {tag, "3.16.8"}}} - , {snappyer, "1.2.9"} - , {emqx_connector, {path, "../../apps/emqx_connector"}} - , {emqx_resource, {path, "../../apps/emqx_resource"}} - , {emqx_bridge, {path, "../../apps/emqx_bridge"}} - ]}. +{deps, [ + {wolff, {git, "https://github.com/kafka4beam/wolff.git", {tag, "1.9.1"}}}, + {kafka_protocol, {git, "https://github.com/kafka4beam/kafka_protocol.git", {tag, "4.1.3"}}}, + {brod_gssapi, {git, "https://github.com/kafka4beam/brod_gssapi.git", {tag, "v0.1.1"}}}, + {brod, {git, "https://github.com/kafka4beam/brod.git", {tag, "3.16.8"}}}, + {snappyer, "1.2.9"}, + {emqx_connector, {path, "../../apps/emqx_connector"}}, + {emqx_resource, {path, "../../apps/emqx_resource"}}, + {emqx_bridge, {path, "../../apps/emqx_bridge"}} +]}. {shell, [ {apps, [emqx_bridge_azure_event_hub]} diff --git a/apps/emqx_bridge_cassandra/rebar.config b/apps/emqx_bridge_cassandra/rebar.config index f1cc275d9..c0a72fef9 100644 --- a/apps/emqx_bridge_cassandra/rebar.config +++ b/apps/emqx_bridge_cassandra/rebar.config @@ -1,10 +1,12 @@ %% -*- mode: erlang; -*- + {erl_opts, [debug_info]}. -{deps, [ {ecql, {git, "https://github.com/emqx/ecql.git", {tag, "v0.5.2"}}} - , {emqx_connector, {path, "../../apps/emqx_connector"}} - , {emqx_resource, {path, "../../apps/emqx_resource"}} - , {emqx_bridge, {path, "../../apps/emqx_bridge"}} - ]}. +{deps, [ + {ecql, {git, "https://github.com/emqx/ecql.git", {tag, "v0.5.2"}}}, + {emqx_connector, {path, "../../apps/emqx_connector"}}, + {emqx_resource, {path, "../../apps/emqx_resource"}}, + {emqx_bridge, {path, "../../apps/emqx_bridge"}} +]}. {shell, [ {apps, [emqx_bridge_cassandra]} diff --git a/apps/emqx_bridge_clickhouse/rebar.config b/apps/emqx_bridge_clickhouse/rebar.config index 98d889f41..e0b0dc4a2 100644 --- a/apps/emqx_bridge_clickhouse/rebar.config +++ b/apps/emqx_bridge_clickhouse/rebar.config @@ -1,10 +1,12 @@ %% -*- mode: erlang; -*- + {erl_opts, [debug_info]}. -{deps, [ {clickhouse, {git, "https://github.com/emqx/clickhouse-client-erl", {tag, "0.3.1"}}} - , {emqx_connector, {path, "../../apps/emqx_connector"}} - , {emqx_resource, {path, "../../apps/emqx_resource"}} - , {emqx_bridge, {path, "../../apps/emqx_bridge"}} - ]}. +{deps, [ + {clickhouse, {git, "https://github.com/emqx/clickhouse-client-erl", {tag, "0.3.1"}}}, + {emqx_connector, {path, "../../apps/emqx_connector"}}, + {emqx_resource, {path, "../../apps/emqx_resource"}}, + {emqx_bridge, {path, "../../apps/emqx_bridge"}} +]}. {shell, [ {apps, [emqx_bridge_clickhouse]} diff --git a/apps/emqx_bridge_confluent/rebar.config b/apps/emqx_bridge_confluent/rebar.config index 4f700e4cd..5e4719106 100644 --- a/apps/emqx_bridge_confluent/rebar.config +++ b/apps/emqx_bridge_confluent/rebar.config @@ -1,14 +1,16 @@ %% -*- mode: erlang; -*- + {erl_opts, [debug_info]}. -{deps, [ {wolff, {git, "https://github.com/kafka4beam/wolff.git", {tag, "1.9.1"}}} - , {kafka_protocol, {git, "https://github.com/kafka4beam/kafka_protocol.git", {tag, "4.1.3"}}} - , {brod_gssapi, {git, "https://github.com/kafka4beam/brod_gssapi.git", {tag, "v0.1.1"}}} - , {brod, {git, "https://github.com/kafka4beam/brod.git", {tag, "3.16.8"}}} - , {snappyer, "1.2.9"} - , {emqx_connector, {path, "../../apps/emqx_connector"}} - , {emqx_resource, {path, "../../apps/emqx_resource"}} - , {emqx_bridge, {path, "../../apps/emqx_bridge"}} - ]}. +{deps, [ + {wolff, {git, "https://github.com/kafka4beam/wolff.git", {tag, "1.9.1"}}}, + {kafka_protocol, {git, "https://github.com/kafka4beam/kafka_protocol.git", {tag, "4.1.3"}}}, + {brod_gssapi, {git, "https://github.com/kafka4beam/brod_gssapi.git", {tag, "v0.1.1"}}}, + {brod, {git, "https://github.com/kafka4beam/brod.git", {tag, "3.16.8"}}}, + {snappyer, "1.2.9"}, + {emqx_connector, {path, "../../apps/emqx_connector"}}, + {emqx_resource, {path, "../../apps/emqx_resource"}}, + {emqx_bridge, {path, "../../apps/emqx_bridge"}} +]}. {shell, [ {apps, [emqx_bridge_confluent]} diff --git a/apps/emqx_bridge_dynamo/rebar.config b/apps/emqx_bridge_dynamo/rebar.config index 38598d313..8c46477b0 100644 --- a/apps/emqx_bridge_dynamo/rebar.config +++ b/apps/emqx_bridge_dynamo/rebar.config @@ -1,10 +1,12 @@ %% -*- mode: erlang; -*- + {erl_opts, [debug_info]}. -{deps, [ {erlcloud, {git, "https://github.com/emqx/erlcloud", {tag, "3.7.0.3"}}} - , {emqx_connector, {path, "../../apps/emqx_connector"}} - , {emqx_resource, {path, "../../apps/emqx_resource"}} - , {emqx_bridge, {path, "../../apps/emqx_bridge"}} - ]}. +{deps, [ + {erlcloud, {git, "https://github.com/emqx/erlcloud", {tag, "3.7.0.3"}}}, + {emqx_connector, {path, "../../apps/emqx_connector"}}, + {emqx_resource, {path, "../../apps/emqx_resource"}}, + {emqx_bridge, {path, "../../apps/emqx_bridge"}} +]}. {shell, [ {apps, [emqx_bridge_dynamo]} diff --git a/apps/emqx_bridge_gcp_pubsub/rebar.config b/apps/emqx_bridge_gcp_pubsub/rebar.config index 8c4823d71..a6a12b429 100644 --- a/apps/emqx_bridge_gcp_pubsub/rebar.config +++ b/apps/emqx_bridge_gcp_pubsub/rebar.config @@ -1,4 +1,5 @@ %% -*- mode: erlang; -*- + {erl_opts, [ warn_unused_vars, warn_shadow_vars, diff --git a/apps/emqx_bridge_greptimedb/rebar.config b/apps/emqx_bridge_greptimedb/rebar.config index 985299c3d..170ced1e7 100644 --- a/apps/emqx_bridge_greptimedb/rebar.config +++ b/apps/emqx_bridge_greptimedb/rebar.config @@ -1,12 +1,12 @@ -{erl_opts, [ - debug_info -]}. +%% -*- mode: erlang; -*- + +{erl_opts, [debug_info]}. {deps, [ - {emqx_connector, {path, "../../apps/emqx_connector"}}, - {emqx_resource, {path, "../../apps/emqx_resource"}}, - {emqx_bridge, {path, "../../apps/emqx_bridge"}}, - {greptimedb, {git, "https://github.com/GreptimeTeam/greptimedb-client-erl", {tag, "v0.1.6"}}} + {emqx_connector, {path, "../../apps/emqx_connector"}}, + {emqx_resource, {path, "../../apps/emqx_resource"}}, + {emqx_bridge, {path, "../../apps/emqx_bridge"}}, + {greptimedb, {git, "https://github.com/GreptimeTeam/greptimedb-client-erl", {tag, "v0.1.6"}}} ]}. {plugins, [rebar3_path_deps]}. {project_plugins, [erlfmt]}. diff --git a/apps/emqx_bridge_hstreamdb/rebar.config b/apps/emqx_bridge_hstreamdb/rebar.config index fb99cd627..eab7bcb3f 100644 --- a/apps/emqx_bridge_hstreamdb/rebar.config +++ b/apps/emqx_bridge_hstreamdb/rebar.config @@ -1,9 +1,11 @@ %% -*- mode: erlang -*- + {erl_opts, [debug_info]}. {deps, [ - {hstreamdb_erl, {git, "https://github.com/hstreamdb/hstreamdb_erl.git", {tag, "0.4.5+v0.16.1"}}}, - {emqx, {path, "../../apps/emqx"}}, - {emqx_utils, {path, "../../apps/emqx_utils"}} + {hstreamdb_erl, + {git, "https://github.com/hstreamdb/hstreamdb_erl.git", {tag, "0.4.5+v0.16.1"}}}, + {emqx, {path, "../../apps/emqx"}}, + {emqx_utils, {path, "../../apps/emqx_utils"}} ]}. {shell, [ diff --git a/apps/emqx_bridge_http/rebar.config b/apps/emqx_bridge_http/rebar.config index 3db9e06af..696bc268a 100644 --- a/apps/emqx_bridge_http/rebar.config +++ b/apps/emqx_bridge_http/rebar.config @@ -1,9 +1,11 @@ %% -*- mode: erlang; -*- + {erl_opts, [debug_info]}. -{deps, [ {emqx_connector, {path, "../../apps/emqx_connector"}} - , {emqx_resource, {path, "../../apps/emqx_resource"}} - , {emqx_bridge, {path, "../../apps/emqx_bridge"}} - ]}. +{deps, [ + {emqx_connector, {path, "../../apps/emqx_connector"}}, + {emqx_resource, {path, "../../apps/emqx_resource"}}, + {emqx_bridge, {path, "../../apps/emqx_bridge"}} +]}. {shell, [ {apps, [emqx_bridge_http]} diff --git a/apps/emqx_bridge_influxdb/rebar.config b/apps/emqx_bridge_influxdb/rebar.config index 9f1e72515..8acb242eb 100644 --- a/apps/emqx_bridge_influxdb/rebar.config +++ b/apps/emqx_bridge_influxdb/rebar.config @@ -1,3 +1,5 @@ +%% -*- mode: erlang; -*- + {erl_opts, [debug_info]}. {deps, [ diff --git a/apps/emqx_bridge_iotdb/rebar.config b/apps/emqx_bridge_iotdb/rebar.config index 4455bb148..2a3526e08 100644 --- a/apps/emqx_bridge_iotdb/rebar.config +++ b/apps/emqx_bridge_iotdb/rebar.config @@ -5,11 +5,11 @@ ]}. {deps, [ - {emqx, {path, "../../apps/emqx"}}, - {emqx_connector, {path, "../../apps/emqx_connector"}}, - {emqx_resource, {path, "../../apps/emqx_resource"}}, - {emqx_bridge, {path, "../../apps/emqx_bridge"}}, - {emqx_bridge_http, {path, "../emqx_bridge_http"}} + {emqx, {path, "../../apps/emqx"}}, + {emqx_connector, {path, "../../apps/emqx_connector"}}, + {emqx_resource, {path, "../../apps/emqx_resource"}}, + {emqx_bridge, {path, "../../apps/emqx_bridge"}}, + {emqx_bridge_http, {path, "../emqx_bridge_http"}} ]}. {plugins, [rebar3_path_deps]}. {project_plugins, [erlfmt]}. diff --git a/apps/emqx_bridge_kafka/rebar.config b/apps/emqx_bridge_kafka/rebar.config index db7d619e1..e71ccea9f 100644 --- a/apps/emqx_bridge_kafka/rebar.config +++ b/apps/emqx_bridge_kafka/rebar.config @@ -1,14 +1,16 @@ %% -*- mode: erlang; -*- + {erl_opts, [debug_info]}. -{deps, [ {wolff, {git, "https://github.com/kafka4beam/wolff.git", {tag, "1.9.1"}}} - , {kafka_protocol, {git, "https://github.com/kafka4beam/kafka_protocol.git", {tag, "4.1.3"}}} - , {brod_gssapi, {git, "https://github.com/kafka4beam/brod_gssapi.git", {tag, "v0.1.1"}}} - , {brod, {git, "https://github.com/kafka4beam/brod.git", {tag, "3.16.8"}}} - , {snappyer, "1.2.9"} - , {emqx_connector, {path, "../../apps/emqx_connector"}} - , {emqx_resource, {path, "../../apps/emqx_resource"}} - , {emqx_bridge, {path, "../../apps/emqx_bridge"}} - ]}. +{deps, [ + {wolff, {git, "https://github.com/kafka4beam/wolff.git", {tag, "1.9.1"}}}, + {kafka_protocol, {git, "https://github.com/kafka4beam/kafka_protocol.git", {tag, "4.1.3"}}}, + {brod_gssapi, {git, "https://github.com/kafka4beam/brod_gssapi.git", {tag, "v0.1.1"}}}, + {brod, {git, "https://github.com/kafka4beam/brod.git", {tag, "3.16.8"}}}, + {snappyer, "1.2.9"}, + {emqx_connector, {path, "../../apps/emqx_connector"}}, + {emqx_resource, {path, "../../apps/emqx_resource"}}, + {emqx_bridge, {path, "../../apps/emqx_bridge"}} +]}. {shell, [ {apps, [emqx_bridge_kafka]} diff --git a/apps/emqx_bridge_kinesis/rebar.config b/apps/emqx_bridge_kinesis/rebar.config index 4d7f87540..7b62c68b3 100644 --- a/apps/emqx_bridge_kinesis/rebar.config +++ b/apps/emqx_bridge_kinesis/rebar.config @@ -1,10 +1,12 @@ %% -*- mode: erlang; -*- + {erl_opts, [debug_info]}. -{deps, [ {erlcloud, {git, "https://github.com/emqx/erlcloud", {tag, "3.7.0.3"}}} - , {emqx_connector, {path, "../../apps/emqx_connector"}} - , {emqx_resource, {path, "../../apps/emqx_resource"}} - , {emqx_bridge, {path, "../../apps/emqx_bridge"}} - ]}. +{deps, [ + {erlcloud, {git, "https://github.com/emqx/erlcloud", {tag, "3.7.0.3"}}}, + {emqx_connector, {path, "../../apps/emqx_connector"}}, + {emqx_resource, {path, "../../apps/emqx_resource"}}, + {emqx_bridge, {path, "../../apps/emqx_bridge"}} +]}. {shell, [ {apps, [emqx_bridge_kinesis]} diff --git a/apps/emqx_bridge_matrix/rebar.config b/apps/emqx_bridge_matrix/rebar.config index 87c145f26..350e87bf3 100644 --- a/apps/emqx_bridge_matrix/rebar.config +++ b/apps/emqx_bridge_matrix/rebar.config @@ -1,3 +1,5 @@ +%% -*- mode: erlang; -*- + {erl_opts, [debug_info]}. {deps, [ diff --git a/apps/emqx_bridge_mongodb/rebar.config b/apps/emqx_bridge_mongodb/rebar.config index 568a1837d..a1e337396 100644 --- a/apps/emqx_bridge_mongodb/rebar.config +++ b/apps/emqx_bridge_mongodb/rebar.config @@ -1,10 +1,12 @@ %% -*- mode: erlang; -*- + {erl_opts, [debug_info]}. -{deps, [ {emqx_connector, {path, "../../apps/emqx_connector"}} - , {emqx_resource, {path, "../../apps/emqx_resource"}} - , {emqx_bridge, {path, "../../apps/emqx_bridge"}} - , {emqx_mongodb, {path, "../../apps/emqx_mongodb"}} - ]}. +{deps, [ + {emqx_connector, {path, "../../apps/emqx_connector"}}, + {emqx_resource, {path, "../../apps/emqx_resource"}}, + {emqx_bridge, {path, "../../apps/emqx_bridge"}}, + {emqx_mongodb, {path, "../../apps/emqx_mongodb"}} +]}. {shell, [ {apps, [emqx_bridge_mongodb]} diff --git a/apps/emqx_bridge_mqtt/rebar.config b/apps/emqx_bridge_mqtt/rebar.config index 35ccc1a37..08d08078d 100644 --- a/apps/emqx_bridge_mqtt/rebar.config +++ b/apps/emqx_bridge_mqtt/rebar.config @@ -1,3 +1,5 @@ +%% -*- mode: erlang; -*- + {deps, [ {emqx, {path, "../../apps/emqx"}} ]}. diff --git a/apps/emqx_bridge_mysql/rebar.config b/apps/emqx_bridge_mysql/rebar.config index 244738d49..ef1c3a6ac 100644 --- a/apps/emqx_bridge_mysql/rebar.config +++ b/apps/emqx_bridge_mysql/rebar.config @@ -1,10 +1,12 @@ %% -*- mode: erlang; -*- + {erl_opts, [debug_info]}. -{deps, [ {emqx_connector, {path, "../../apps/emqx_connector"}} - , {emqx_resource, {path, "../../apps/emqx_resource"}} - , {emqx_bridge, {path, "../../apps/emqx_bridge"}} - , {emqx_mysql, {path, "../../apps/emqx_mysql"}} - ]}. +{deps, [ + {emqx_connector, {path, "../../apps/emqx_connector"}}, + {emqx_resource, {path, "../../apps/emqx_resource"}}, + {emqx_bridge, {path, "../../apps/emqx_bridge"}}, + {emqx_mysql, {path, "../../apps/emqx_mysql"}} +]}. {shell, [ {apps, [emqx_bridge_mysql]} diff --git a/apps/emqx_bridge_opents/rebar.config b/apps/emqx_bridge_opents/rebar.config index d7bd4560f..3ef36a4f1 100644 --- a/apps/emqx_bridge_opents/rebar.config +++ b/apps/emqx_bridge_opents/rebar.config @@ -1,3 +1,5 @@ +%% -*- mode: erlang; -*- + {erl_opts, [debug_info]}. {deps, [ diff --git a/apps/emqx_bridge_oracle/rebar.config b/apps/emqx_bridge_oracle/rebar.config index c238546c4..9bde07f2a 100644 --- a/apps/emqx_bridge_oracle/rebar.config +++ b/apps/emqx_bridge_oracle/rebar.config @@ -1,13 +1,14 @@ %% -*- mode: erlang; -*- {erl_opts, [debug_info]}. -{deps, [ {emqx_oracle, {path, "../../apps/emqx_oracle"}} - , {emqx_connector, {path, "../../apps/emqx_connector"}} - , {emqx_resource, {path, "../../apps/emqx_resource"}} - , {emqx_bridge, {path, "../../apps/emqx_bridge"}} - ]}. +{deps, [ + {emqx_oracle, {path, "../../apps/emqx_oracle"}}, + {emqx_connector, {path, "../../apps/emqx_connector"}}, + {emqx_resource, {path, "../../apps/emqx_resource"}}, + {emqx_bridge, {path, "../../apps/emqx_bridge"}} +]}. {shell, [ - % {config, "config/sys.config"}, + % {config, "config/sys.config"}, {apps, [emqx_bridge_oracle]} ]}. diff --git a/apps/emqx_bridge_pgsql/rebar.config b/apps/emqx_bridge_pgsql/rebar.config index da2729b70..96947b664 100644 --- a/apps/emqx_bridge_pgsql/rebar.config +++ b/apps/emqx_bridge_pgsql/rebar.config @@ -1,3 +1,5 @@ +%% -*- mode: erlang; -*- + {erl_opts, [debug_info]}. {deps, [ diff --git a/apps/emqx_bridge_rabbitmq/rebar.config b/apps/emqx_bridge_rabbitmq/rebar.config index 010c01e4e..a2f072e48 100644 --- a/apps/emqx_bridge_rabbitmq/rebar.config +++ b/apps/emqx_bridge_rabbitmq/rebar.config @@ -1,32 +1,32 @@ %% -*- mode: erlang; -*- + {erl_opts, [debug_info]}. {deps, [ - %% The following two are dependencies of rabbit_common - {thoas, {git, "https://github.com/emqx/thoas.git", {tag, "v1.0.0"}}} - , {credentials_obfuscation, {git, "https://github.com/emqx/credentials-obfuscation.git", {tag, "v3.2.0"}}} - %% The v3.11.13.2 (v3.11.13_with_app_src branch), employed in the next two dependencies, - %% represents a fork of the official RabbitMQ v3.11.13 tag. This fork diverges - %% from the official version as it includes app and hrl files - %% generated by make files in subdirectories deps/rabbit_common and - %% deps/amqp_client (app files are also relocated from the ebin to the src - %% directory). This modification ensures compatibility with rebar3, as - %% rabbit_common and amqp_client utilize the erlang.mk build tool. - %% Similar changes are probably needed when upgrading to newer versions - %% of rabbit_common and amqp_client. There are hex packages for rabbit_common and - %% amqp_client, but they are not used here as we don't want to depend on - %% packages that we don't have control over. - , {rabbit_common, {git_subdir, - "https://github.com/emqx/rabbitmq-server.git", - {tag, "v3.11.13.2"}, - "deps/rabbit_common"}} - , {amqp_client, {git_subdir, - "https://github.com/emqx/rabbitmq-server.git", - {tag, "v3.11.13.2"}, - "deps/amqp_client"}} - , {emqx_connector, {path, "../../apps/emqx_connector"}} - , {emqx_resource, {path, "../../apps/emqx_resource"}} - , {emqx_bridge, {path, "../../apps/emqx_bridge"}} - ]}. + %% The following two are dependencies of rabbit_common + {thoas, {git, "https://github.com/emqx/thoas.git", {tag, "v1.0.0"}}}, + {credentials_obfuscation, + {git, "https://github.com/emqx/credentials-obfuscation.git", {tag, "v3.2.0"}}}, + %% The v3.11.13.2 (v3.11.13_with_app_src branch), employed in the next two dependencies, + %% represents a fork of the official RabbitMQ v3.11.13 tag. This fork diverges + %% from the official version as it includes app and hrl files + %% generated by make files in subdirectories deps/rabbit_common and + %% deps/amqp_client (app files are also relocated from the ebin to the src + %% directory). This modification ensures compatibility with rebar3, as + %% rabbit_common and amqp_client utilize the erlang.mk build tool. + %% Similar changes are probably needed when upgrading to newer versions + %% of rabbit_common and amqp_client. There are hex packages for rabbit_common and + %% amqp_client, but they are not used here as we don't want to depend on + %% packages that we don't have control over. + {rabbit_common, + {git_subdir, "https://github.com/emqx/rabbitmq-server.git", {tag, "v3.11.13.2"}, + "deps/rabbit_common"}}, + {amqp_client, + {git_subdir, "https://github.com/emqx/rabbitmq-server.git", {tag, "v3.11.13.2"}, + "deps/amqp_client"}}, + {emqx_connector, {path, "../../apps/emqx_connector"}}, + {emqx_resource, {path, "../../apps/emqx_resource"}}, + {emqx_bridge, {path, "../../apps/emqx_bridge"}} +]}. {shell, [ {apps, [emqx_bridge_rabbitmq]} diff --git a/apps/emqx_bridge_redis/rebar.config b/apps/emqx_bridge_redis/rebar.config index a779c88a3..8000a5596 100644 --- a/apps/emqx_bridge_redis/rebar.config +++ b/apps/emqx_bridge_redis/rebar.config @@ -1,10 +1,12 @@ %% -*- mode: erlang; -*- + {erl_opts, [debug_info]}. -{deps, [ {emqx_connector, {path, "../../apps/emqx_connector"}} - , {emqx_resource, {path, "../../apps/emqx_resource"}} - , {emqx_bridge, {path, "../../apps/emqx_bridge"}} - , {emqx_redis, {path, "../../apps/emqx_redis"}} - ]}. +{deps, [ + {emqx_connector, {path, "../../apps/emqx_connector"}}, + {emqx_resource, {path, "../../apps/emqx_resource"}}, + {emqx_bridge, {path, "../../apps/emqx_bridge"}}, + {emqx_redis, {path, "../../apps/emqx_redis"}} +]}. {shell, [ {apps, [emqx_bridge_redis]} diff --git a/apps/emqx_bridge_rocketmq/rebar.config b/apps/emqx_bridge_rocketmq/rebar.config index 50dbeaa57..be477d7a5 100644 --- a/apps/emqx_bridge_rocketmq/rebar.config +++ b/apps/emqx_bridge_rocketmq/rebar.config @@ -1,3 +1,5 @@ +%% -*- mode: erlang; -*- + {erl_opts, [debug_info]}. {deps, [ diff --git a/apps/emqx_bridge_sqlserver/rebar.config b/apps/emqx_bridge_sqlserver/rebar.config index 5f586f529..cad8b9c26 100644 --- a/apps/emqx_bridge_sqlserver/rebar.config +++ b/apps/emqx_bridge_sqlserver/rebar.config @@ -1,9 +1,11 @@ %% -*- mode: erlang; -*- + {erl_opts, [debug_info]}. -{deps, [ {emqx_connector, {path, "../../apps/emqx_connector"}} - , {emqx_resource, {path, "../../apps/emqx_resource"}} - , {emqx_bridge, {path, "../../apps/emqx_bridge"}} - ]}. +{deps, [ + {emqx_connector, {path, "../../apps/emqx_connector"}}, + {emqx_resource, {path, "../../apps/emqx_resource"}}, + {emqx_bridge, {path, "../../apps/emqx_bridge"}} +]}. {shell, [ {apps, [emqx_bridge_sqlserver]} diff --git a/apps/emqx_bridge_syskeeper/rebar.config b/apps/emqx_bridge_syskeeper/rebar.config index 31879d9ce..14685de33 100644 --- a/apps/emqx_bridge_syskeeper/rebar.config +++ b/apps/emqx_bridge_syskeeper/rebar.config @@ -1,6 +1,8 @@ %% -*- mode: erlang; -*- + {erl_opts, [debug_info]}. -{deps, [ {emqx_connector, {path, "../../apps/emqx_connector"}} - , {emqx_resource, {path, "../../apps/emqx_resource"}} - , {emqx_bridge, {path, "../../apps/emqx_bridge"}} - ]}. +{deps, [ + {emqx_connector, {path, "../../apps/emqx_connector"}}, + {emqx_resource, {path, "../../apps/emqx_resource"}}, + {emqx_bridge, {path, "../../apps/emqx_bridge"}} +]}. diff --git a/apps/emqx_bridge_tdengine/rebar.config b/apps/emqx_bridge_tdengine/rebar.config index 97ccf918a..f9a123d48 100644 --- a/apps/emqx_bridge_tdengine/rebar.config +++ b/apps/emqx_bridge_tdengine/rebar.config @@ -1,3 +1,5 @@ +%% -*- mode: erlang; -*- + {erl_opts, [debug_info]}. {deps, [ diff --git a/apps/emqx_bridge_timescale/rebar.config b/apps/emqx_bridge_timescale/rebar.config index 87c145f26..350e87bf3 100644 --- a/apps/emqx_bridge_timescale/rebar.config +++ b/apps/emqx_bridge_timescale/rebar.config @@ -1,3 +1,5 @@ +%% -*- mode: erlang; -*- + {erl_opts, [debug_info]}. {deps, [ diff --git a/apps/emqx_ctl/rebar.config b/apps/emqx_ctl/rebar.config index 2656fd554..5e70eb5e3 100644 --- a/apps/emqx_ctl/rebar.config +++ b/apps/emqx_ctl/rebar.config @@ -1,2 +1,4 @@ +%% -*- mode: erlang; -*- + {erl_opts, [debug_info]}. {deps, []}. diff --git a/apps/emqx_dashboard_rbac/rebar.config b/apps/emqx_dashboard_rbac/rebar.config index fbd100693..86d548e32 100644 --- a/apps/emqx_dashboard_rbac/rebar.config +++ b/apps/emqx_dashboard_rbac/rebar.config @@ -2,5 +2,5 @@ {erl_opts, [debug_info]}. {deps, [ - {emqx_dashboard, {path, "../../apps/emqx_dashboard"}} + {emqx_dashboard, {path, "../../apps/emqx_dashboard"}} ]}. diff --git a/apps/emqx_dashboard_sso/rebar.config b/apps/emqx_dashboard_sso/rebar.config index 874aca800..90172af3d 100644 --- a/apps/emqx_dashboard_sso/rebar.config +++ b/apps/emqx_dashboard_sso/rebar.config @@ -2,7 +2,7 @@ {erl_opts, [debug_info]}. {deps, [ - {emqx_ldap, {path, "../../apps/emqx_ldap"}}, - {emqx_dashboard, {path, "../../apps/emqx_dashboard"}}, - {esaml, {git, "https://github.com/emqx/esaml", {tag, "v1.1.3"}}} + {emqx_ldap, {path, "../../apps/emqx_ldap"}}, + {emqx_dashboard, {path, "../../apps/emqx_dashboard"}}, + {esaml, {git, "https://github.com/emqx/esaml", {tag, "v1.1.3"}}} ]}. diff --git a/apps/emqx_durable_storage/rebar.config b/apps/emqx_durable_storage/rebar.config index f04819025..3a6379924 100644 --- a/apps/emqx_durable_storage/rebar.config +++ b/apps/emqx_durable_storage/rebar.config @@ -1,3 +1,3 @@ %% -*- mode:erlang -*- -{deps, - [{emqx_utils, {path, "../emqx_utils"}}]}. + +{deps, [{emqx_utils, {path, "../emqx_utils"}}]}. diff --git a/apps/emqx_enterprise/rebar.config b/apps/emqx_enterprise/rebar.config index 53ee79c85..f854ba9f5 100644 --- a/apps/emqx_enterprise/rebar.config +++ b/apps/emqx_enterprise/rebar.config @@ -1,3 +1,5 @@ +%% -*- mode: erlang; -*- + {erl_opts, [debug_info]}. {deps, []}. diff --git a/apps/emqx_eviction_agent/rebar.config b/apps/emqx_eviction_agent/rebar.config index b055d8f4f..ae520b07b 100644 --- a/apps/emqx_eviction_agent/rebar.config +++ b/apps/emqx_eviction_agent/rebar.config @@ -1,2 +1,4 @@ +%% -*- mode: erlang; -*- + {deps, [{emqx, {path, "../../apps/emqx"}}]}. {project_plugins, [erlfmt]}. diff --git a/apps/emqx_exhook/rebar.config b/apps/emqx_exhook/rebar.config index 7abc601b4..38c3fcbf6 100644 --- a/apps/emqx_exhook/rebar.config +++ b/apps/emqx_exhook/rebar.config @@ -1,4 +1,5 @@ %%-*- mode: erlang -*- + {plugins, [ rebar3_proper, {grpc_plugin, {git, "https://github.com/HJianBo/grpc_plugin", {tag, "v0.10.2"}}} diff --git a/apps/emqx_gateway/rebar.config b/apps/emqx_gateway/rebar.config index dc803f9b5..2d041305e 100644 --- a/apps/emqx_gateway/rebar.config +++ b/apps/emqx_gateway/rebar.config @@ -1,4 +1,5 @@ %% -*- mode: erlang -*- + {erl_opts, [debug_info]}. {deps, [ {emqx, {path, "../emqx"}}, diff --git a/apps/emqx_gateway/src/emqx_gateway_http.erl b/apps/emqx_gateway/src/emqx_gateway_http.erl index 802bbb689..921678210 100644 --- a/apps/emqx_gateway/src/emqx_gateway_http.erl +++ b/apps/emqx_gateway/src/emqx_gateway_http.erl @@ -509,7 +509,7 @@ codestr(400) -> 'BAD_REQUEST'; codestr(404) -> 'RESOURCE_NOT_FOUND'; codestr(405) -> 'METHOD_NOT_ALLOWED'; codestr(409) -> 'NOT_SUPPORT'; -codestr(500) -> 'UNKNOW_ERROR'; +codestr(500) -> 'UNKNOWN_ERROR'; codestr(501) -> 'NOT_IMPLEMENTED'. fmtstr(Fmt, Args) -> diff --git a/apps/emqx_gateway_coap/rebar.config b/apps/emqx_gateway_coap/rebar.config index 493ebe04f..e463da183 100644 --- a/apps/emqx_gateway_coap/rebar.config +++ b/apps/emqx_gateway_coap/rebar.config @@ -1,4 +1,5 @@ %% -*- mode: erlang -*- + {erl_opts, [debug_info]}. {deps, [ {emqx, {path, "../emqx"}}, diff --git a/apps/emqx_gateway_exproto/rebar.config b/apps/emqx_gateway_exproto/rebar.config index aafbe4e13..3347b920d 100644 --- a/apps/emqx_gateway_exproto/rebar.config +++ b/apps/emqx_gateway_exproto/rebar.config @@ -1,4 +1,5 @@ %% -*- mode: erlang -*- + {erl_opts, [debug_info]}. {deps, [ {emqx, {path, "../emqx"}}, diff --git a/apps/emqx_gateway_gbt32960/rebar.config b/apps/emqx_gateway_gbt32960/rebar.config index 456746d25..b0513d86d 100644 --- a/apps/emqx_gateway_gbt32960/rebar.config +++ b/apps/emqx_gateway_gbt32960/rebar.config @@ -1,4 +1,5 @@ %% -*- mode: erlang -*- + {erl_opts, [debug_info]}. {deps, [ {emqx, {path, "../../apps/emqx"}}, diff --git a/apps/emqx_gateway_jt808/rebar.config b/apps/emqx_gateway_jt808/rebar.config index 456746d25..b5886c1e6 100644 --- a/apps/emqx_gateway_jt808/rebar.config +++ b/apps/emqx_gateway_jt808/rebar.config @@ -1,5 +1,7 @@ %% -*- mode: erlang -*- + {erl_opts, [debug_info]}. + {deps, [ {emqx, {path, "../../apps/emqx"}}, {emqx_utils, {path, "../emqx_utils"}}, diff --git a/apps/emqx_gateway_lwm2m/rebar.config b/apps/emqx_gateway_lwm2m/rebar.config index 28c3c85e5..22c3cea1a 100644 --- a/apps/emqx_gateway_lwm2m/rebar.config +++ b/apps/emqx_gateway_lwm2m/rebar.config @@ -1,5 +1,7 @@ %% -*- mode: erlang -*- + {erl_opts, [debug_info]}. -{deps, [ {emqx, {path, "../../apps/emqx"}}, - {emqx_gateway, {path, "../../apps/emqx_gateway"}} - ]}. +{deps, [ + {emqx, {path, "../../apps/emqx"}}, + {emqx_gateway, {path, "../../apps/emqx_gateway"}} +]}. diff --git a/apps/emqx_gateway_mqttsn/rebar.config b/apps/emqx_gateway_mqttsn/rebar.config index c8675c3ba..eaaa23423 100644 --- a/apps/emqx_gateway_mqttsn/rebar.config +++ b/apps/emqx_gateway_mqttsn/rebar.config @@ -1,4 +1,7 @@ +%% -*- mode: erlang; -*- + {erl_opts, [debug_info]}. -{deps, [ {emqx, {path, "../../apps/emqx"}}, - {emqx_gateway, {path, "../../apps/emqx_gateway"}} - ]}. +{deps, [ + {emqx, {path, "../../apps/emqx"}}, + {emqx_gateway, {path, "../../apps/emqx_gateway"}} +]}. diff --git a/apps/emqx_gateway_ocpp/rebar.config b/apps/emqx_gateway_ocpp/rebar.config index 242c1c36f..16bbcd109 100644 --- a/apps/emqx_gateway_ocpp/rebar.config +++ b/apps/emqx_gateway_ocpp/rebar.config @@ -1,3 +1,5 @@ +%% -*- mode: erlang; -*- + {deps, [ {jesse, "1.7.0"}, {emqx, {path, "../../apps/emqx"}}, diff --git a/apps/emqx_gateway_stomp/rebar.config b/apps/emqx_gateway_stomp/rebar.config index 55e6f52f2..b0513d86d 100644 --- a/apps/emqx_gateway_stomp/rebar.config +++ b/apps/emqx_gateway_stomp/rebar.config @@ -1,7 +1,8 @@ %% -*- mode: erlang -*- + {erl_opts, [debug_info]}. {deps, [ - {emqx, {path, "../../apps/emqx"}}, - {emqx_utils, {path, "../emqx_utils"}}, - {emqx_gateway, {path, "../../apps/emqx_gateway"}} + {emqx, {path, "../../apps/emqx"}}, + {emqx_utils, {path, "../emqx_utils"}}, + {emqx_gateway, {path, "../../apps/emqx_gateway"}} ]}. diff --git a/apps/emqx_gateway_stomp/test/emqx_stomp_SUITE.erl b/apps/emqx_gateway_stomp/test/emqx_stomp_SUITE.erl index 58913cf2f..82887a6d2 100644 --- a/apps/emqx_gateway_stomp/test/emqx_stomp_SUITE.erl +++ b/apps/emqx_gateway_stomp/test/emqx_stomp_SUITE.erl @@ -797,7 +797,7 @@ test_frame_error(Frame, AssertFun) -> AssertFun(Sock) end). -t_rest_clienit_info(_) -> +t_rest_clientid_info(_) -> with_connection(fun(Sock) -> send_connection_frame(Sock, <<"guest">>, <<"guest">>), ?assertMatch({ok, #stomp_frame{command = <<"CONNECTED">>}}, recv_a_frame(Sock)), diff --git a/apps/emqx_gcp_device/rebar.config b/apps/emqx_gcp_device/rebar.config index cb594b6f5..671fd195b 100644 --- a/apps/emqx_gcp_device/rebar.config +++ b/apps/emqx_gcp_device/rebar.config @@ -1,3 +1,5 @@ +%% -*- mode: erlang; -*- + {erl_opts, [debug_info]}. {deps, [ {emqx, {path, "../emqx"}}, diff --git a/apps/emqx_ldap/rebar.config b/apps/emqx_ldap/rebar.config index e6e2db243..af9602b02 100644 --- a/apps/emqx_ldap/rebar.config +++ b/apps/emqx_ldap/rebar.config @@ -2,6 +2,6 @@ {erl_opts, [debug_info]}. {deps, [ - {emqx_connector, {path, "../../apps/emqx_connector"}}, - {emqx_resource, {path, "../../apps/emqx_resource"}} + {emqx_connector, {path, "../../apps/emqx_connector"}}, + {emqx_resource, {path, "../../apps/emqx_resource"}} ]}. diff --git a/apps/emqx_license/rebar.config b/apps/emqx_license/rebar.config index e7620387a..07cf47a02 100644 --- a/apps/emqx_license/rebar.config +++ b/apps/emqx_license/rebar.config @@ -1,3 +1,5 @@ +%% -*- mode: erlang; -*- + {deps, [ {emqx, {path, "../../apps/emqx"}}, {emqx_utils, {path, "../emqx_utils"}} diff --git a/apps/emqx_management/src/emqx_mgmt_api_clients.erl b/apps/emqx_management/src/emqx_mgmt_api_clients.erl index dee4a235c..e847d7ab9 100644 --- a/apps/emqx_management/src/emqx_mgmt_api_clients.erl +++ b/apps/emqx_management/src/emqx_mgmt_api_clients.erl @@ -221,7 +221,7 @@ schema("/clients/kickout/bulk") -> tags => ?TAGS, 'requestBody' => emqx_dashboard_swagger:schema_with_example( hoconsc:array(binary()), - ["emqx_clienid_985bb09d", "emqx_clientid_211cc01c"] + ["emqx_clientid_985bb09d", "emqx_clientid_211cc01c"] ), responses => #{ 204 => <<"Kick out clients successfully">> @@ -452,7 +452,7 @@ fields(client) -> {is_bridge, hoconsc:mk(boolean(), #{ desc => - <<"Indicates whether the client is connectedvia bridge">> + <<"Indicates whether the client is connected via bridge">> })}, {keepalive, hoconsc:mk(integer(), #{ @@ -605,7 +605,7 @@ kickout_clients(post, #{body := ClientIDs}) -> {204}; {error, Reason} -> Message = list_to_binary(io_lib:format("~p", [Reason])), - {500, #{code => <<"UNKNOW_ERROR">>, message => Message}} + {500, #{code => <<"UNKNOWN_ERROR">>, message => Message}} end. client(get, #{bindings := Bindings}) -> @@ -660,7 +660,7 @@ set_keepalive(put, #{bindings := #{clientid := ClientID}, body := Body}) -> case emqx_mgmt:set_keepalive(ClientID, Interval) of ok -> lookup(#{clientid => ClientID}); {error, not_found} -> {404, ?CLIENTID_NOT_FOUND}; - {error, Reason} -> {400, #{code => 'PARAMS_ERROR', message => Reason}} + {error, Reason} -> {400, #{code => 'PARAM_ERROR', message => Reason}} end end. @@ -728,7 +728,7 @@ get_authz_cache(#{clientid := ClientID}) -> {404, ?CLIENTID_NOT_FOUND}; {error, Reason} -> Message = list_to_binary(io_lib:format("~p", [Reason])), - {500, #{code => <<"UNKNOW_ERROR">>, message => Message}}; + {500, #{code => <<"UNKNOWN_ERROR">>, message => Message}}; Caches -> Response = [format_authz_cache(Cache) || Cache <- Caches], {200, Response} @@ -742,7 +742,7 @@ clean_authz_cache(#{clientid := ClientID}) -> {404, ?CLIENTID_NOT_FOUND}; {error, Reason} -> Message = list_to_binary(io_lib:format("~p", [Reason])), - {500, #{code => <<"UNKNOW_ERROR">>, message => Message}} + {500, #{code => <<"UNKNOWN_ERROR">>, message => Message}} end. subscribe(#{clientid := ClientID, topic := Topic} = Sub) -> @@ -752,7 +752,7 @@ subscribe(#{clientid := ClientID, topic := Topic} = Sub) -> {404, ?CLIENTID_NOT_FOUND}; {error, Reason} -> Message = list_to_binary(io_lib:format("~p", [Reason])), - {500, #{code => <<"UNKNOW_ERROR">>, message => Message}}; + {500, #{code => <<"UNKNOWN_ERROR">>, message => Message}}; {ok, SubInfo} -> {200, SubInfo} end. diff --git a/apps/emqx_modules/src/emqx_delayed.erl b/apps/emqx_modules/src/emqx_delayed.erl index 301155cc0..7cf9018bc 100644 --- a/apps/emqx_modules/src/emqx_delayed.erl +++ b/apps/emqx_modules/src/emqx_delayed.erl @@ -419,7 +419,7 @@ do_publish(Key = {Ts, _Id}, Now, Acc) when Ts =< Now -> ignore_delayed_message_publish, #{ reason => "client is banned", - clienid => Msg#message.from + clientid => Msg#message.from } ), ok diff --git a/apps/emqx_modules/src/emqx_modules.app.src b/apps/emqx_modules/src/emqx_modules.app.src index 67c6b0ceb..3bf284d50 100644 --- a/apps/emqx_modules/src/emqx_modules.app.src +++ b/apps/emqx_modules/src/emqx_modules.app.src @@ -1,7 +1,7 @@ %% -*- mode: erlang -*- {application, emqx_modules, [ {description, "EMQX Modules"}, - {vsn, "5.0.24"}, + {vsn, "5.0.25"}, {modules, []}, {applications, [kernel, stdlib, emqx, emqx_ctl, observer_cli]}, {mod, {emqx_modules_app, []}}, diff --git a/apps/emqx_mongodb/rebar.config b/apps/emqx_mongodb/rebar.config index 5be42ef17..9cee51c35 100644 --- a/apps/emqx_mongodb/rebar.config +++ b/apps/emqx_mongodb/rebar.config @@ -1,7 +1,8 @@ %% -*- mode: erlang; -*- {erl_opts, [debug_info]}. -{deps, [ {emqx_connector, {path, "../../apps/emqx_connector"}} - , {emqx_resource, {path, "../../apps/emqx_resource"}} - , {mongodb, {git, "https://github.com/emqx/mongodb-erlang", {tag, "v3.0.22"}}} - ]}. +{deps, [ + {emqx_connector, {path, "../../apps/emqx_connector"}}, + {emqx_resource, {path, "../../apps/emqx_resource"}}, + {mongodb, {git, "https://github.com/emqx/mongodb-erlang", {tag, "v3.0.22"}}} +]}. diff --git a/apps/emqx_mysql/rebar.config b/apps/emqx_mysql/rebar.config index 657daf61b..c6e4cc68a 100644 --- a/apps/emqx_mysql/rebar.config +++ b/apps/emqx_mysql/rebar.config @@ -2,8 +2,8 @@ {erl_opts, [debug_info]}. {deps, [ - %% NOTE: mind ecpool version when updating eredis_cluster version - {mysql, {git, "https://github.com/emqx/mysql-otp", {tag, "1.7.4.1"}}}, - {emqx_connector, {path, "../../apps/emqx_connector"}}, - {emqx_resource, {path, "../../apps/emqx_resource"}} + %% NOTE: mind ecpool version when updating eredis_cluster version + {mysql, {git, "https://github.com/emqx/mysql-otp", {tag, "1.7.4.1"}}}, + {emqx_connector, {path, "../../apps/emqx_connector"}}, + {emqx_resource, {path, "../../apps/emqx_resource"}} ]}. diff --git a/apps/emqx_node_rebalance/rebar.config b/apps/emqx_node_rebalance/rebar.config index b055d8f4f..ae520b07b 100644 --- a/apps/emqx_node_rebalance/rebar.config +++ b/apps/emqx_node_rebalance/rebar.config @@ -1,2 +1,4 @@ +%% -*- mode: erlang; -*- + {deps, [{emqx, {path, "../../apps/emqx"}}]}. {project_plugins, [erlfmt]}. diff --git a/apps/emqx_opentelemetry/rebar.config b/apps/emqx_opentelemetry/rebar.config index 5addc4a7e..5e5e8bcf3 100644 --- a/apps/emqx_opentelemetry/rebar.config +++ b/apps/emqx_opentelemetry/rebar.config @@ -1,16 +1,26 @@ %% -*- mode: erlang -*- -{deps, - [{emqx, {path, "../emqx"}} +{deps, [ + {emqx, {path, "../emqx"}}, %% trace - , {opentelemetry_api, {git_subdir, "https://github.com/emqx/opentelemetry-erlang", {tag, "v1.4.7-emqx"}, "apps/opentelemetry_api"}} - , {opentelemetry, {git_subdir, "https://github.com/emqx/opentelemetry-erlang", {tag, "v1.4.7-emqx"}, "apps/opentelemetry"}} + {opentelemetry_api, + {git_subdir, "https://github.com/emqx/opentelemetry-erlang", {tag, "v1.4.7-emqx"}, + "apps/opentelemetry_api"}}, + {opentelemetry, + {git_subdir, "https://github.com/emqx/opentelemetry-erlang", {tag, "v1.4.7-emqx"}, + "apps/opentelemetry"}}, %% logs, metrics - , {opentelemetry_experimental, {git_subdir, "https://github.com/emqx/opentelemetry-erlang", {tag, "v1.4.7-emqx"}, "apps/opentelemetry_experimental"}} - , {opentelemetry_api_experimental, {git_subdir, "https://github.com/emqx/opentelemetry-erlang", {tag, "v1.4.7-emqx"}, "apps/opentelemetry_api_experimental"}} + {opentelemetry_experimental, + {git_subdir, "https://github.com/emqx/opentelemetry-erlang", {tag, "v1.4.7-emqx"}, + "apps/opentelemetry_experimental"}}, + {opentelemetry_api_experimental, + {git_subdir, "https://github.com/emqx/opentelemetry-erlang", {tag, "v1.4.7-emqx"}, + "apps/opentelemetry_api_experimental"}}, %% export - , {opentelemetry_exporter, {git_subdir, "https://github.com/emqx/opentelemetry-erlang", {tag, "v1.4.7-emqx"}, "apps/opentelemetry_exporter"}} - ]}. + {opentelemetry_exporter, + {git_subdir, "https://github.com/emqx/opentelemetry-erlang", {tag, "v1.4.7-emqx"}, + "apps/opentelemetry_exporter"}} +]}. {edoc_opts, [{preprocess, true}]}. {erl_opts, [ diff --git a/apps/emqx_oracle/rebar.config b/apps/emqx_oracle/rebar.config index c6113fe30..b3a5e02ca 100644 --- a/apps/emqx_oracle/rebar.config +++ b/apps/emqx_oracle/rebar.config @@ -1,7 +1,8 @@ %% -*- mode: erlang; -*- {erl_opts, [debug_info]}. -{deps, [ {jamdb_oracle, {git, "https://github.com/emqx/jamdb_oracle", {tag, "0.4.9.5"}}} - , {emqx_connector, {path, "../../apps/emqx_connector"}} - , {emqx_resource, {path, "../../apps/emqx_resource"}} - ]}. +{deps, [ + {jamdb_oracle, {git, "https://github.com/emqx/jamdb_oracle", {tag, "0.4.9.5"}}}, + {emqx_connector, {path, "../../apps/emqx_connector"}}, + {emqx_resource, {path, "../../apps/emqx_resource"}} +]}. diff --git a/apps/emqx_postgresql/rebar.config b/apps/emqx_postgresql/rebar.config index a4b84ef0f..8568e49fe 100644 --- a/apps/emqx_postgresql/rebar.config +++ b/apps/emqx_postgresql/rebar.config @@ -2,7 +2,7 @@ {erl_opts, [debug_info]}. {deps, [ - {epgsql, {git, "https://github.com/emqx/epgsql", {tag, "4.7.1.1"}}}, - {emqx_connector, {path, "../../apps/emqx_connector"}}, - {emqx_resource, {path, "../../apps/emqx_resource"}} + {epgsql, {git, "https://github.com/emqx/epgsql", {tag, "4.7.1.1"}}}, + {emqx_connector, {path, "../../apps/emqx_connector"}}, + {emqx_resource, {path, "../../apps/emqx_resource"}} ]}. diff --git a/apps/emqx_redis/rebar.config b/apps/emqx_redis/rebar.config index a681878f1..e495a4eb6 100644 --- a/apps/emqx_redis/rebar.config +++ b/apps/emqx_redis/rebar.config @@ -2,8 +2,8 @@ {erl_opts, [debug_info]}. {deps, [ - %% NOTE: mind ecpool version when updating eredis_cluster version - {eredis_cluster, {git, "https://github.com/emqx/eredis_cluster", {tag, "0.8.3"}}}, - {emqx_connector, {path, "../../apps/emqx_connector"}}, - {emqx_resource, {path, "../../apps/emqx_resource"}} + %% NOTE: mind ecpool version when updating eredis_cluster version + {eredis_cluster, {git, "https://github.com/emqx/eredis_cluster", {tag, "0.8.3"}}}, + {emqx_connector, {path, "../../apps/emqx_connector"}}, + {emqx_resource, {path, "../../apps/emqx_resource"}} ]}. diff --git a/apps/emqx_s3/rebar.config b/apps/emqx_s3/rebar.config index e34406e54..7c6208092 100644 --- a/apps/emqx_s3/rebar.config +++ b/apps/emqx_s3/rebar.config @@ -1,3 +1,5 @@ +%% -*- mode: erlang; -*- + {deps, [ {emqx, {path, "../../apps/emqx"}}, {erlcloud, {git, "https://github.com/emqx/erlcloud", {tag, "3.7.0.3"}}}, diff --git a/apps/emqx_schema_registry/rebar.config b/apps/emqx_schema_registry/rebar.config index d604b89d9..342737ee6 100644 --- a/apps/emqx_schema_registry/rebar.config +++ b/apps/emqx_schema_registry/rebar.config @@ -2,14 +2,14 @@ {erl_opts, [debug_info]}. {deps, [ - {emqx, {path, "../emqx"}}, - {emqx_utils, {path, "../emqx_utils"}}, - {emqx_rule_engine, {path, "../emqx_rule_engine"}}, - {erlavro, {git, "https://github.com/klarna/erlavro.git", {tag, "2.9.8"}}}, - {gpb, "4.19.9"} + {emqx, {path, "../emqx"}}, + {emqx_utils, {path, "../emqx_utils"}}, + {emqx_rule_engine, {path, "../emqx_rule_engine"}}, + {erlavro, {git, "https://github.com/klarna/erlavro.git", {tag, "2.9.8"}}}, + {gpb, "4.19.9"} ]}. {shell, [ - % {config, "config/sys.config"}, + % {config, "config/sys.config"}, {apps, [emqx_schema_registry]} ]}. diff --git a/bin/nodetool b/bin/nodetool index c0d5b0025..ed1ce7706 100755 --- a/bin/nodetool +++ b/bin/nodetool @@ -12,7 +12,8 @@ main(Args) -> case os:type() of - {win32, nt} -> ok; + {win32, nt} -> + ok; _nix -> case init:get_argument(start_epmd) of {ok, [["true"]]} -> @@ -44,22 +45,31 @@ do(Args) -> ok = do_with_halt(Args, "mnesia_dir", fun create_mnesia_dir/2), ok = do_with_halt(Args, "chkconfig", fun("-config", X) -> chkconfig(X) end), ok = do_with_halt(Args, "chkconfig", fun chkconfig/1), - Args1 = do_with_ret(Args, "-name", - fun(TargetName) -> - ThisNode = this_node_name(longnames, TargetName), - {ok, _} = net_kernel:start([ThisNode, longnames]), - put(target_node, nodename(TargetName)) - end), - Args2 = do_with_ret(Args1, "-sname", - fun(TargetName) -> - ThisNode = this_node_name(shortnames, TargetName), - {ok, _} = net_kernel:start([ThisNode, shortnames]), - put(target_node, nodename(TargetName)) - end), - RestArgs = do_with_ret(Args2, "-setcookie", - fun(Cookie) -> - erlang:set_cookie(node(), list_to_atom(Cookie)) - end), + Args1 = do_with_ret( + Args, + "-name", + fun(TargetName) -> + ThisNode = this_node_name(longnames, TargetName), + {ok, _} = net_kernel:start([ThisNode, longnames]), + put(target_node, nodename(TargetName)) + end + ), + Args2 = do_with_ret( + Args1, + "-sname", + fun(TargetName) -> + ThisNode = this_node_name(shortnames, TargetName), + {ok, _} = net_kernel:start([ThisNode, shortnames]), + put(target_node, nodename(TargetName)) + end + ), + RestArgs = do_with_ret( + Args2, + "-setcookie", + fun(Cookie) -> + erlang:set_cookie(node(), list_to_atom(Cookie)) + end + ), [application:start(App) || App <- [crypto, public_key, ssl]], TargetNode = get(target_node), @@ -95,9 +105,11 @@ do(Args) -> ok -> ok; {badrpc, timeout} -> - io:format("EMQX is still shutting down, it failed to stop gracefully " - "within the configured timeout of: ~ps\n", - [erlang:convert_time_unit(?SHUTDOWN_TIMEOUT_MS, millisecond, second)]), + io:format( + "EMQX is still shutting down, it failed to stop gracefully " + "within the configured timeout of: ~ps\n", + [erlang:convert_time_unit(?SHUTDOWN_TIMEOUT_MS, millisecond, second)] + ), halt(1); {badrpc, nodedown} -> %% nodetool commands are always executed after a ping @@ -106,8 +118,15 @@ do(Args) -> ok end; ["rpc", Module, Function | RpcArgs] -> - case rpc:call(TargetNode, list_to_atom(Module), list_to_atom(Function), - [RpcArgs], 60000) of + case + rpc:call( + TargetNode, + list_to_atom(Module), + list_to_atom(Function), + [RpcArgs], + 60000 + ) + of ok -> ok; {error, cmd_not_found} -> @@ -122,7 +141,11 @@ do(Args) -> halt(1) end; ["rpc_infinity", Module, Function | RpcArgs] -> - case rpc:call(TargetNode, list_to_atom(Module), list_to_atom(Function), [RpcArgs], infinity) of + case + rpc:call( + TargetNode, list_to_atom(Module), list_to_atom(Function), [RpcArgs], infinity + ) + of ok -> ok; {badrpc, Reason} -> @@ -132,8 +155,15 @@ do(Args) -> halt(1) end; ["rpcterms", Module, Function | ArgsAsString] -> - case rpc:call(TargetNode, list_to_atom(Module), list_to_atom(Function), - consult(lists:flatten(ArgsAsString)), 60000) of + case + rpc:call( + TargetNode, + list_to_atom(Module), + list_to_atom(Function), + consult(lists:flatten(ArgsAsString)), + 60000 + ) + of {badrpc, Reason} -> io:format("RPC to ~p failed: ~p\n", [TargetNode, Reason]), halt(1); @@ -153,7 +183,9 @@ do(Args) -> end; Other -> io:format("Other: ~p~n", [Other]), - io:format("Usage: nodetool chkconfig|getpid|ping|stop|rpc|rpc_infinity|rpcterms|eval|cold_eval [Terms] [RPC]\n") + io:format( + "Usage: nodetool chkconfig|getpid|ping|stop|rpc|rpc_infinity|rpcterms|eval|cold_eval [Terms] [RPC]\n" + ) end, net_kernel:stop(). @@ -173,22 +205,22 @@ parse_eval_args(Args) -> % shells may process args into more than one, and end up stripping % spaces, so this converts all of that to a single string to parse String = binary_to_list( - list_to_binary( - join(Args," ") - ) - ), + list_to_binary( + join(Args, " ") + ) + ), % then just as a convenience to users, if they forgot a trailing % '.' add it for them. Normalized = case lists:reverse(String) of - [$. | _] -> String; - R -> lists:reverse([$. | R]) + [$. | _] -> String; + R -> lists:reverse([$. | R]) end, % then scan and parse the string {ok, Scanned, _} = erl_scan:string(Normalized), - {ok, Parsed } = erl_parse:parse_exprs(Scanned), + {ok, Parsed} = erl_parse:parse_exprs(Scanned), Parsed. do_with_ret(Args, Name, Handler) -> @@ -207,7 +239,8 @@ do_with_halt(Args, Name, Handler) -> false -> ok; {Args1, _Rest} -> - erlang:apply(Handler, Args1), %% should halt + %% should halt + erlang:apply(Handler, Args1), io:format(standard_error, "~s handler did not halt", [Name]), halt(?LINE) end. @@ -218,7 +251,9 @@ take_args(Args, OptName, 0) -> take_args(Args, OptName, OptArity) -> take_args(Args, OptName, OptArity, _Scanned = []). -take_args([], _, _, _) -> false; %% no such option +%% no such option +take_args([], _, _, _) -> + false; take_args([Name | Rest], Name, Arity, Scanned) -> length(Rest) >= Arity orelse error({not_enough_args_for, Name}), {Result, Tail} = lists:split(Arity, Rest), @@ -282,16 +317,24 @@ chkconfig(File) -> {error, Problems} -> lists:foreach(fun print_issue/1, Problems), %% halt(1) if any problems were errors - halt(case [x || {error, _} <- Problems] of - [] -> 0; - _ -> 1 - end) + halt( + case [x || {error, _} <- Problems] of + [] -> 0; + _ -> 1 + end + ) end; {error, {Line, Mod, Term}} -> - io:format(standard_error, ["Error on line ", file:format_error({Line, Mod, Term}), "\n"], []), + io:format( + standard_error, ["Error on line ", file:format_error({Line, Mod, Term}), "\n"], [] + ), halt(1); {error, Error} -> - io:format(standard_error, ["Error reading config file: ", File, " ", file:format_error(Error), "\n"], []), + io:format( + standard_error, + ["Error reading config file: ", File, " ", file:format_error(Error), "\n"], + [] + ), halt(1) end. @@ -304,7 +347,8 @@ check_license(Config) -> %% start but will not be able to receive connections due to connection limits. %% It may receive license updates from the cluster further. case emqx_license:read_license(Config) of - {ok, _} -> ok; + {ok, _} -> + ok; {error, Error} -> io:format(standard_error, "Error reading license: ~p~n", [Error]), halt(1) @@ -315,7 +359,7 @@ check_license(Config) -> %% consult(Str) when is_list(Str) -> consult([], Str, []); -consult(Bin) when is_binary(Bin)-> +consult(Bin) when is_binary(Bin) -> consult([], binary_to_list(Bin), []). consult(Cont, Str, Acc) -> @@ -349,7 +393,7 @@ validate([Terms]) -> %% Some initial and basic checks for the app.config file get_validation_funs() -> - [ ]. + []. print_issue({warning, Warning}) -> io:format(standard_error, "Warning in app.config: ~s~n", [Warning]); @@ -363,7 +407,7 @@ print_issue({error, Error}) -> %% for most unicode use cases anyway. join([], Sep) when is_list(Sep) -> []; -join([H|T], Sep) -> +join([H | T], Sep) -> H ++ lists:append([Sep ++ X || X <- T]). add_libs_dir() -> @@ -375,9 +419,11 @@ add_libs_dir() -> Release = lists:keyfind(CurrentVsn, 3, Releases), {release, _Name, _AppVsn, _ErtsVsn, Libs, _State} = Release, lists:foreach( - fun({Name, Vsn, _}) -> - add_lib_dir(RootDir, Name, Vsn) - end, Libs); + fun({Name, Vsn, _}) -> + add_lib_dir(RootDir, Name, Vsn) + end, + Libs + ); {error, Reason} -> %% rel file was been deleted by release handler error({failed_to_read_RELEASES_file, RelFile, Reason}) @@ -405,7 +451,8 @@ add_lib_dir(RootDir, Name, Vsn) -> %% See `emqx_gateway_schema:fields(gateway)` is_emqx_application(Name) andalso ensure_application_load(Name), ok; - {error, _} -> error(LibDir) + {error, _} -> + error(LibDir) end. is_emqx_application(Name) when is_atom(Name) -> diff --git a/deploy/charts/emqx-enterprise/README.md b/deploy/charts/emqx-enterprise/README.md index 1d4898624..d48e1f0e1 100644 --- a/deploy/charts/emqx-enterprise/README.md +++ b/deploy/charts/emqx-enterprise/README.md @@ -11,14 +11,14 @@ This chart bootstraps an emqx deployment on a Kubernetes cluster using the Helm To install the chart with the release name `my-emqx`: -+ From github ++ From Github ``` $ git clone https://github.com/emqx/emqx.git $ cd emqx/deploy/charts/emqx-enterprise $ helm install my-emqx . ``` -+ From chart repos ++ From chart Repos ``` helm repo add emqx https://repos.emqx.io/charts helm install my-emqx emqx/emqx-enterprise @@ -37,85 +37,85 @@ $ helm del my-emqx The following table lists the configurable parameters of the emqx chart and their default values. -| Parameter | Description | Default Value | +| Parameter | Description | Default Value | |--------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------| -| `replicaCount` | It is recommended to have odd number of nodes in a cluster, otherwise the emqx cluster cannot be automatically healed in case of net-split. | 3 | -| `image.repository` | EMQX Image name | emqx/emqx-enterprise | -| `image.pullPolicy` | The image pull policy | IfNotPresent | -| `image.pullSecrets ` | The image pull secrets | `[]` (does not add image pull secrets to deployed pods) | -| `serviceAccount.create` | If `true`, create a new service account | `true` | -| `serviceAccount.name` | Service account to be used. If not set and `serviceAccount.create` is `true`, a name is generated using the fullname template | | -| `serviceAccount.annotations` | Annotations to add to the service account | | -| `envFromSecret` | The name pull a secret in the same kubernetes namespace which contains values that will be added to the environment | nil | -| `recreatePods` | Forces the recreation of pods during upgrades, which can be useful to always apply the most recent configuration. | false | -| `podAnnotations ` | Annotations for pod | `{}` | -| `podManagementPolicy` | To redeploy a chart with existing PVC(s), the value must be set to Parallel to avoid deadlock | `Parallel` | -| `persistence.enabled` | Enable EMQX persistence using PVC | false | -| `persistence.storageClass` | Storage class of backing PVC | `nil` (uses alpha storage class annotation) | -| `persistence.existingClaim` | EMQX data Persistent Volume existing claim name, evaluated as a template | "" | -| `persistence.accessMode` | PVC Access Mode for EMQX volume | ReadWriteOnce | -| `persistence.size` | PVC Storage Request for EMQX volume | 20Mi | -| `initContainers` | Containers that run before the creation of EMQX containers. They can contain utilities or setup scripts. | `{}` | -| `resources` | CPU/Memory resource requests/limits | {} | -| `extraVolumeMounts` | Additional volumeMounts to the default backend container. | [] | -| `extraVolumes` | Additional volumes to the default backend pod.| [] | -| `nodeSelector` | Node labels for pod assignment | `{}` | -| `tolerations` | Toleration labels for pod assignment | `[]` | -| `affinity` | Map of node/pod affinities | `{}` | -| `service.type` | Kubernetes Service type. | ClusterIP | -| `service.mqtt` | Port for MQTT. | 1883 | -| `service.mqttssl` | Port for MQTT(SSL). | 8883 | -| `service.ws` | Port for WebSocket/HTTP. | 8083 | -| `service.wss` | Port for WSS/HTTPS. | 8084 | -| `service.dashboard` | Port for dashboard and API. | 18083 | -| `service.nodePorts.mqtt` | Kubernetes node port for MQTT. | nil | -| `service.nodePorts.mqttssl` | Kubernetes node port for MQTT(SSL). | nil | -| `service.nodePorts.ws` | Kubernetes node port for WebSocket/HTTP. | nil | -| `service.nodePorts.wss` | Kubernetes node port for WSS/HTTPS. | nil | -| `service.nodePorts.dashboard` | Kubernetes node port for dashboard. | nil | -| `service.loadBalancerClass` | The load balancer implementation this Service belongs to | | -| `service.loadBalancerIP` | loadBalancerIP for Service | nil | -| `service.loadBalancerSourceRanges` | Address(es) that are allowed when service is LoadBalancer | [] | -| `service.externalIPs` | ExternalIPs for the service | [] | -| `service.externalTrafficPolicy` | External Traffic Policy for the service | `Cluster` -| `service.annotations` | Service/ServiceMonitor annotations | {}(evaluated as a template) | -| `service.labels` | Service/ServiceMontior labels | {}(evaluated as a template) | -| `ingress.dashboard.enabled` | Enable ingress for EMQX Dashboard | false | -| `ingress.dashboard.ingressClassName` | Set the ingress class for EMQX Dashboard | | -| `ingress.dashboard.path` | Ingress path for EMQX Dashboard | / | -| `ingress.dashboard.pathType` | Ingress pathType for EMQX Dashboard | `ImplementationSpecific` | -| `ingress.dashboard.hosts` | Ingress hosts for EMQX Dashboard | dashboard.emqx.local | -| `ingress.dashboard.tls` | Ingress tls for EMQX Dashboard | [] | -| `ingress.dashboard.annotations` | Ingress annotations for EMQX Dashboard | {} | -| `ingress.dashboard.ingressClassName` | Set the ingress class for EMQX Dashboard | | -| `ingress.mqtt.enabled` | Enable ingress for MQTT | false | -| `ingress.mqtt.ingressClassName` | Set the ingress class for MQTT | | -| `ingress.mqtt.path` | Ingress path for MQTT | / | -| `ingress.mqtt.pathType` | Ingress pathType for MQTT | `ImplementationSpecific` | -| `ingress.mqtt.hosts` | Ingress hosts for MQTT | mqtt.emqx.local | -| `ingress.mqtt.tls` | Ingress tls for MQTT | [] | -| `ingress.mqtt.annotations` | Ingress annotations for MQTT | {} | -| `ingress.mqtt.ingressClassName` | Set the ingress class for MQTT | | -| `metrics.enable` | If set to true, [prometheus-operator](https://github.com/prometheus-operator/prometheus-operator) needs to be installed, and emqx_prometheus needs to enable | false | -| `metrics.type` | Now we only supported "prometheus" | "prometheus" | -| `ssl.enabled` | Enable SSL support | false | -| `ssl.useExisting` | Use existing certificate or let cert-manager generate one | false | -| `ssl.existingName` | Name of existing certificate | emqx-tls | -| `ssl.dnsnames` | DNS name(s) for certificate to be generated | {} | -| `ssl.commonName` | Common name for or certificate to be generated | | -| `ssl.issuer.name` | Issuer name for certificate generation | letsencrypt-dns | -| `ssl.issuer.kind` | Issuer kind for certificate generation | ClusterIssuer | +| `replicaCount` | It is recommended to have odd number of nodes in a cluster, otherwise the emqx cluster cannot be automatically healed in case of net-split. | 3 | +| `image.repository` | EMQX Image name | emqx/emqx-enterprise | +| `image.pullPolicy` | The image pull policy | IfNotPresent | +| `image.pullSecrets ` | The image pull secrets | `[]` (does not add image pull secrets to deployed pods) | +| `serviceAccount.create` | If `true`, create a new service account | `true` | +| `serviceAccount.name` | Service account to be used. If not set and `serviceAccount.create` is `true`, a name is generated using the full-name template | | +| `serviceAccount.annotations` | Annotations to add to the service account | | +| `envFromSecret` | The name pull a secret in the same Kubernetes namespace which contains values that will be added to the environment | nil | +| `recreatePods` | Forces the recreation of pods during upgrades, which can be useful to always apply the most recent configuration. | false | +| `podAnnotations ` | Annotations for pod | `{}` | +| `podManagementPolicy` | To redeploy a chart with existing PVC(s), the value must be set to Parallel to avoid deadlock | `Parallel` | +| `persistence.enabled` | Enable EMQX persistence using PVC | false | +| `persistence.storageClass` | Storage class of backing PVC | `nil` (uses alpha storage class annotation) | +| `persistence.existingClaim` | EMQX data Persistent Volume existing claim name, evaluated as a template | "" | +| `persistence.accessMode` | PVC Access Mode for EMQX volume | ReadWriteOnce | +| `persistence.size` | PVC Storage Request for EMQX volume | 20Mi | +| `initContainers` | Containers that run before the creation of EMQX containers. They can contain utilities or setup scripts. | `{}` | +| `resources` | CPU/Memory resource requests/limits | {} | +| `extraVolumeMounts` | Additional volumeMounts to the default backend container. | [] | +| `extraVolumes` | Additional volumes to the default backend pod. | [] | +| `nodeSelector` | Node labels for pod assignment | `{}` | +| `tolerations` | Toleration labels for pod assignment | `[]` | +| `affinity` | Map of node/pod affinities | `{}` | +| `service.type` | Kubernetes Service type. | ClusterIP | +| `service.mqtt` | Port for MQTT. | 1883 | +| `service.mqttssl` | Port for MQTT(SSL). | 8883 | +| `service.ws` | Port for WebSocket/HTTP. | 8083 | +| `service.wss` | Port for WSS/HTTPS. | 8084 | +| `service.dashboard` | Port for dashboard and API. | 18083 | +| `service.nodePorts.mqtt` | Kubernetes node port for MQTT. | nil | +| `service.nodePorts.mqttssl` | Kubernetes node port for MQTT(SSL). | nil | +| `service.nodePorts.ws` | Kubernetes node port for WebSocket/HTTP. | nil | +| `service.nodePorts.wss` | Kubernetes node port for WSS/HTTPS. | nil | +| `service.nodePorts.dashboard` | Kubernetes node port for dashboard. | nil | +| `service.loadBalancerClass` | The load balancer implementation this Service belongs to | | +| `service.loadBalancerIP` | loadBalancerIP for Service | nil | +| `service.loadBalancerSourceRanges` | Address(es) that are allowed when service is LoadBalancer | [] | +| `service.externalIPs` | ExternalIPs for the service | [] | +| `service.externalTrafficPolicy` | External Traffic Policy for the service | `Cluster` | +| `service.annotations` | Service/ServiceMonitor annotations | {}(evaluated as a template) | +| `service.labels` | Service/ServiceMonitor labels | {}(evaluated as a template) | +| `ingress.dashboard.enabled` | Enable ingress for EMQX Dashboard | false | +| `ingress.dashboard.ingressClassName` | Set the ingress class for EMQX Dashboard | | +| `ingress.dashboard.path` | Ingress path for EMQX Dashboard | / | +| `ingress.dashboard.pathType` | Ingress pathType for EMQX Dashboard | `ImplementationSpecific` | +| `ingress.dashboard.hosts` | Ingress hosts for EMQX Dashboard | dashboard.emqx.local | +| `ingress.dashboard.tls` | Ingress tls for EMQX Dashboard | [] | +| `ingress.dashboard.annotations` | Ingress annotations for EMQX Dashboard | {} | +| `ingress.dashboard.ingressClassName` | Set the ingress class for EMQX Dashboard | | +| `ingress.mqtt.enabled` | Enable ingress for MQTT | false | +| `ingress.mqtt.ingressClassName` | Set the ingress class for MQTT | | +| `ingress.mqtt.path` | Ingress path for MQTT | / | +| `ingress.mqtt.pathType` | Ingress pathType for MQTT | `ImplementationSpecific` | +| `ingress.mqtt.hosts` | Ingress hosts for MQTT | mqtt.emqx.local | +| `ingress.mqtt.tls` | Ingress tls for MQTT | [] | +| `ingress.mqtt.annotations` | Ingress annotations for MQTT | {} | +| `ingress.mqtt.ingressClassName` | Set the ingress class for MQTT | | +| `metrics.enable` | If set to true, [prometheus-operator](https://github.com/prometheus-operator/prometheus-operator) needs to be installed, and emqx_prometheus needs to enable | false | +| `metrics.type` | Now we only supported "prometheus" | "prometheus" | +| `ssl.enabled` | Enable SSL support | false | +| `ssl.useExisting` | Use existing certificate or let cert-manager generate one | false | +| `ssl.existingName` | Name of existing certificate | emqx-tls | +| `ssl.dnsnames` | DNS name(s) for certificate to be generated | {} | +| `ssl.commonName` | Common name for or certificate to be generated | | +| `ssl.issuer.name` | Issuer name for certificate generation | letsencrypt-dns | +| `ssl.issuer.kind` | Issuer kind for certificate generation | ClusterIssuer | ## EMQX specific settings The following table lists the configurable [EMQX](https://www.emqx.io/)-specific parameters of the chart and their default values. -Parameter | Description | Default Value ---- | --- | --- -`emqxConfig` | Map of [configuration](https://www.emqx.io/docs/en/v5.0/admin/cfg.html) items -expressed as [environment variables](https://www.emqx.io/docs/en/v5.0/admin/cfg.html#environment-variables) (prefix `EMQX_` can be omitted) or using the configuration -files [namespaced dotted notation](https://www.emqx.io/docs/en/v5.0/admin/cfg.html#syntax) | `nil` -`emqxLicenseSecretName` | Name of the secret that holds the license information | `nil` +| Parameter | Description | Default Value | +|------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------|---------------| +| `emqxConfig` | Map of [configuration](https://www.emqx.io/docs/en/v5.0/admin/cfg.html) items | | +| expressed as [environment variables](https://www.emqx.io/docs/en/v5.0/admin/cfg.html#environment-variables) (prefix `EMQX_` can be omitted) or using the configuration | | | +| files [namespaced dotted notation](https://www.emqx.io/docs/en/v5.0/admin/cfg.html#syntax) | `nil` | | +| `emqxLicenseSecretName` | Name of the secret that holds the license information | `nil` | ## SSL settings `cert-manager` generates secrets with certificate data using the keys `tls.crt` and `tls.key`. The helm chart always mounts those keys as files to `/tmp/ssl/` @@ -136,9 +136,8 @@ In order to preserve the original client's IP address, you could change the emqx EMQX_LISTENERS__TCP__DEFAULT__PROXY_PROTOCOL: "true" ``` -With haproxy you'd also need the following ingress annotation: +With HAProxy you'd also need the following ingress annotation: ``` haproxy-ingress.github.io/proxy-protocol: "v2" ``` - diff --git a/deploy/charts/emqx-enterprise/templates/StatefulSet.yaml b/deploy/charts/emqx-enterprise/templates/StatefulSet.yaml index a70b6d168..624f0f2ab 100644 --- a/deploy/charts/emqx-enterprise/templates/StatefulSet.yaml +++ b/deploy/charts/emqx-enterprise/templates/StatefulSet.yaml @@ -110,14 +110,14 @@ spec: - name: wss containerPort: {{ .Values.emqxConfig.EMQX_LISTENERS__WSS__DEFAULT__BIND | default 8084 }} - name: dashboard - containerPort: {{ .Values.emqxConfig.EMQX_DASHBOARD__LISTENER__HTTP__BIND | default 18083 }} + containerPort: {{ .Values.emqxConfig.EMQX_DASHBOARD__LISTENERS__HTTP__BIND | default 18083 }} {{- if not (empty .Values.emqxConfig.EMQX_LISTENERS__TCP__INTERNAL__BIND) }} - name: internalmqtt containerPort: {{ .Values.emqxConfig.EMQX_LISTENERS__TCP__INTERNAL__BIND }} {{- end }} - {{- if not (empty .Values.emqxConfig.EMQX_DASHBOARD__LISTENER__HTTPS__BIND) }} + {{- if not (empty .Values.emqxConfig.EMQX_DASHBOARD__LISTENERS__HTTPS__BIND) }} - name: dashboardtls - containerPort: {{ .Values.emqxConfig.EMQX_DASHBOARD__LISTENER__HTTPS__BIND }} + containerPort: {{ .Values.emqxConfig.EMQX_DASHBOARD__LISTENERS__HTTPS__BIND }} {{- end }} - name: ekka containerPort: 4370 @@ -152,14 +152,14 @@ spec: readinessProbe: httpGet: path: /status - port: {{ .Values.emqxConfig.EMQX_DASHBOARD__LISTENER__HTTP__BIND | default 18083 }} + port: {{ .Values.emqxConfig.EMQX_DASHBOARD__LISTENERS__HTTP__BIND | default 18083 }} initialDelaySeconds: 10 periodSeconds: 5 failureThreshold: 30 livenessProbe: httpGet: path: /status - port: {{ .Values.emqxConfig.EMQX_DASHBOARD__LISTENER__HTTP__BIND | default 18083 }} + port: {{ .Values.emqxConfig.EMQX_DASHBOARD__LISTENERS__HTTP__BIND | default 18083 }} initialDelaySeconds: 60 periodSeconds: 30 failureThreshold: 10 diff --git a/deploy/charts/emqx/README.md b/deploy/charts/emqx/README.md index 010156eda..a06d12b5b 100644 --- a/deploy/charts/emqx/README.md +++ b/deploy/charts/emqx/README.md @@ -11,14 +11,14 @@ This chart bootstraps an emqx deployment on a Kubernetes cluster using the Helm To install the chart with the release name `my-emqx`: -+ From github ++ From Github ``` $ git clone https://github.com/emqx/emqx.git $ cd emqx/deploy/charts/emqx $ helm install my-emqx . ``` -+ From chart repos ++ From chart Repos ``` helm repo add emqx https://repos.emqx.io/charts helm install my-emqx emqx/emqx @@ -37,86 +37,86 @@ $ helm del my-emqx The following table lists the configurable parameters of the emqx chart and their default values. -| Parameter | Description | Default Value | +| Parameter | Description | Default Value | |--------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------| -| `replicaCount` | It is recommended to have odd number of nodes in a cluster, otherwise the emqx cluster cannot be automatically healed in case of net-split. | 3 | -| `image.repository` | EMQX Image name | emqx/emqx | -| `image.pullPolicy` | The image pull policy | IfNotPresent | -| `image.pullSecrets ` | The image pull secrets | `[]` (does not add image pull secrets to deployed pods) | -| `serviceAccount.create` | If `true`, create a new service account | `true` | -| `serviceAccount.name` | Service account to be used. If not set and `serviceAccount.create` is `true`, a name is generated using the fullname template | | -| `serviceAccount.annotations` | Annotations to add to the service account | | -| `envFromSecret` | The name pull a secret in the same kubernetes namespace which contains values that will be added to the environment | nil | -| `recreatePods` | Forces the recreation of pods during upgrades, which can be useful to always apply the most recent configuration. | false | -| `podAnnotations ` | Annotations for pod | `{}` | -| `podManagementPolicy` | To redeploy a chart with existing PVC(s), the value must be set to Parallel to avoid deadlock | `Parallel` | -| `persistence.enabled` | Enable EMQX persistence using PVC | false | -| `persistence.storageClass` | Storage class of backing PVC | `nil` (uses alpha storage class annotation) | -| `persistence.existingClaim` | EMQX data Persistent Volume existing claim name, evaluated as a template | "" | -| `persistence.accessMode` | PVC Access Mode for EMQX volume | ReadWriteOnce | -| `persistence.size` | PVC Storage Request for EMQX volume | 20Mi | -| `initContainers` | Containers that run before the creation of EMQX containers. They can contain utilities or setup scripts. | `{}` | -| `resources` | CPU/Memory resource requests/limits | {} | -| `extraVolumeMounts` | Additional volumeMounts to the default backend container. | [] | -| `extraVolumes` | Additional volumes to the default backend pod.| [] | -| `nodeSelector` | Node labels for pod assignment | `{}` | -| `tolerations` | Toleration labels for pod assignment | `[]` | -| `affinity` | Map of node/pod affinities | `{}` | -| `topologySpreadConstraints` | List of topology spread constraints without labelSelector | `[]` | -| `service.type` | Kubernetes Service type. | ClusterIP | -| `service.mqtt` | Port for MQTT. | 1883 | -| `service.mqttssl` | Port for MQTT(SSL). | 8883 | -| `service.ws` | Port for WebSocket/HTTP. | 8083 | -| `service.wss` | Port for WSS/HTTPS. | 8084 | -| `service.dashboard` | Port for dashboard and API. | 18083 | -| `service.nodePorts.mqtt` | Kubernetes node port for MQTT. | nil | -| `service.nodePorts.mqttssl` | Kubernetes node port for MQTT(SSL). | nil | -| `service.nodePorts.ws` | Kubernetes node port for WebSocket/HTTP. | nil | -| `service.nodePorts.wss` | Kubernetes node port for WSS/HTTPS. | nil | -| `service.nodePorts.dashboard` | Kubernetes node port for dashboard. | nil | -| `service.loadBalancerClass` | The load balancer implementation this Service belongs to | | -| `service.loadBalancerIP` | loadBalancerIP for Service | nil | -| `service.loadBalancerSourceRanges` | Address(es) that are allowed when service is LoadBalancer | [] | -| `service.externalIPs` | ExternalIPs for the service | [] | -| `service.externalTrafficPolicy` | External Traffic Policy for the service | `Cluster` -| `service.annotations` | Service/ServiceMonitor annotations | {}(evaluated as a template) | -| `service.labels` | Service/ServiceMontior labels | {}(evaluated as a template) | -| `ingress.dashboard.enabled` | Enable ingress for EMQX Dashboard | false | -| `ingress.dashboard.ingressClassName` | Set the ingress class for EMQX Dashboard | | -| `ingress.dashboard.path` | Ingress path for EMQX Dashboard | / | -| `ingress.dashboard.pathType` | Ingress pathType for EMQX Dashboard | `ImplementationSpecific` | -| `ingress.dashboard.hosts` | Ingress hosts for EMQX Dashboard | dashboard.emqx.local | -| `ingress.dashboard.tls` | Ingress tls for EMQX Dashboard | [] | -| `ingress.dashboard.annotations` | Ingress annotations for EMQX Dashboard | {} | -| `ingress.dashboard.ingressClassName` | Set the ingress class for EMQX Dashboard | | -| `ingress.mqtt.enabled` | Enable ingress for MQTT | false | -| `ingress.mqtt.ingressClassName` | Set the ingress class for MQTT | | -| `ingress.mqtt.path` | Ingress path for MQTT | / | -| `ingress.mqtt.pathType` | Ingress pathType for MQTT | `ImplementationSpecific` | -| `ingress.mqtt.hosts` | Ingress hosts for MQTT | mqtt.emqx.local | -| `ingress.mqtt.tls` | Ingress tls for MQTT | [] | -| `ingress.mqtt.annotations` | Ingress annotations for MQTT | {} | -| `ingress.mqtt.ingressClassName` | Set the ingress class for MQTT | | -| `metrics.enable` | If set to true, [prometheus-operator](https://github.com/prometheus-operator/prometheus-operator) needs to be installed, and emqx_prometheus needs to enable | false | -| `metrics.type` | Now we only supported "prometheus" | "prometheus" | -| `ssl.enabled` | Enable SSL support | false | -| `ssl.useExisting` | Use existing certificate or let cert-manager generate one | false | -| `ssl.existingName` | Name of existing certificate | emqx-tls | -| `ssl.commonName` | Common name for or certificate to be generated | | -| `ssl.dnsnames` | DNS name(s) for certificate to be generated | {} | -| `ssl.issuer.name` | Issuer name for certificate generation | letsencrypt-dns | -| `ssl.issuer.kind` | Issuer kind for certificate generation | ClusterIssuer | +| `replicaCount` | It is recommended to have odd number of nodes in a cluster, otherwise the emqx cluster cannot be automatically healed in case of net-split. | 3 | +| `image.repository` | EMQX Image name | emqx/emqx | +| `image.pullPolicy` | The image pull policy | IfNotPresent | +| `image.pullSecrets ` | The image pull secrets | `[]` (does not add image pull secrets to deployed pods) | +| `serviceAccount.create` | If `true`, create a new service account | `true` | +| `serviceAccount.name` | Service account to be used. If not set and `serviceAccount.create` is `true`, a name is generated using the full-name template | | +| `serviceAccount.annotations` | Annotations to add to the service account | | +| `envFromSecret` | The name pull a secret in the same Kubernetes namespace which contains values that will be added to the environment | nil | +| `recreatePods` | Forces the recreation of pods during upgrades, which can be useful to always apply the most recent configuration. | false | +| `podAnnotations ` | Annotations for pod | `{}` | +| `podManagementPolicy` | To redeploy a chart with existing PVC(s), the value must be set to Parallel to avoid deadlock | `Parallel` | +| `persistence.enabled` | Enable EMQX persistence using PVC | false | +| `persistence.storageClass` | Storage class of backing PVC | `nil` (uses alpha storage class annotation) | +| `persistence.existingClaim` | EMQX data Persistent Volume existing claim name, evaluated as a template | "" | +| `persistence.accessMode` | PVC Access Mode for EMQX volume | ReadWriteOnce | +| `persistence.size` | PVC Storage Request for EMQX volume | 20Mi | +| `initContainers` | Containers that run before the creation of EMQX containers. They can contain utilities or setup scripts. | `{}` | +| `resources` | CPU/Memory resource requests/limits | {} | +| `extraVolumeMounts` | Additional volumeMounts to the default backend container. | [] | +| `extraVolumes` | Additional volumes to the default backend pod. | [] | +| `nodeSelector` | Node labels for pod assignment | `{}` | +| `tolerations` | Toleration labels for pod assignment | `[]` | +| `affinity` | Map of node/pod affinities | `{}` | +| `topologySpreadConstraints` | List of topology spread constraints without labelSelector | `[]` | +| `service.type` | Kubernetes Service type. | ClusterIP | +| `service.mqtt` | Port for MQTT. | 1883 | +| `service.mqttssl` | Port for MQTT(SSL). | 8883 | +| `service.ws` | Port for WebSocket/HTTP. | 8083 | +| `service.wss` | Port for WSS/HTTPS. | 8084 | +| `service.dashboard` | Port for dashboard and API. | 18083 | +| `service.nodePorts.mqtt` | Kubernetes node port for MQTT. | nil | +| `service.nodePorts.mqttssl` | Kubernetes node port for MQTT(SSL). | nil | +| `service.nodePorts.ws` | Kubernetes node port for WebSocket/HTTP. | nil | +| `service.nodePorts.wss` | Kubernetes node port for WSS/HTTPS. | nil | +| `service.nodePorts.dashboard` | Kubernetes node port for dashboard. | nil | +| `service.loadBalancerClass` | The load balancer implementation this Service belongs to | | +| `service.loadBalancerIP` | loadBalancerIP for Service | nil | +| `service.loadBalancerSourceRanges` | Address(es) that are allowed when service is LoadBalancer | [] | +| `service.externalIPs` | ExternalIPs for the service | [] | +| `service.externalTrafficPolicy` | External Traffic Policy for the service | `Cluster` | +| `service.annotations` | Service/ServiceMonitor annotations | {}(evaluated as a template) | +| `service.labels` | Service/ServiceMonitor labels | {}(evaluated as a template) | +| `ingress.dashboard.enabled` | Enable ingress for EMQX Dashboard | false | +| `ingress.dashboard.ingressClassName` | Set the ingress class for EMQX Dashboard | | +| `ingress.dashboard.path` | Ingress path for EMQX Dashboard | / | +| `ingress.dashboard.pathType` | Ingress pathType for EMQX Dashboard | `ImplementationSpecific` | +| `ingress.dashboard.hosts` | Ingress hosts for EMQX Dashboard | dashboard.emqx.local | +| `ingress.dashboard.tls` | Ingress tls for EMQX Dashboard | [] | +| `ingress.dashboard.annotations` | Ingress annotations for EMQX Dashboard | {} | +| `ingress.dashboard.ingressClassName` | Set the ingress class for EMQX Dashboard | | +| `ingress.mqtt.enabled` | Enable ingress for MQTT | false | +| `ingress.mqtt.ingressClassName` | Set the ingress class for MQTT | | +| `ingress.mqtt.path` | Ingress path for MQTT | / | +| `ingress.mqtt.pathType` | Ingress pathType for MQTT | `ImplementationSpecific` | +| `ingress.mqtt.hosts` | Ingress hosts for MQTT | mqtt.emqx.local | +| `ingress.mqtt.tls` | Ingress tls for MQTT | [] | +| `ingress.mqtt.annotations` | Ingress annotations for MQTT | {} | +| `ingress.mqtt.ingressClassName` | Set the ingress class for MQTT | | +| `metrics.enable` | If set to true, [prometheus-operator](https://github.com/prometheus-operator/prometheus-operator) needs to be installed, and emqx_prometheus needs to enable | false | +| `metrics.type` | Now we only supported "prometheus" | "prometheus" | +| `ssl.enabled` | Enable SSL support | false | +| `ssl.useExisting` | Use existing certificate or let cert-manager generate one | false | +| `ssl.existingName` | Name of existing certificate | emqx-tls | +| `ssl.commonName` | Common name for or certificate to be generated | | +| `ssl.dnsnames` | DNS name(s) for certificate to be generated | {} | +| `ssl.issuer.name` | Issuer name for certificate generation | letsencrypt-dns | +| `ssl.issuer.kind` | Issuer kind for certificate generation | ClusterIssuer | ## EMQX specific settings The following table lists the configurable [EMQX](https://www.emqx.io/)-specific parameters of the chart and their default values. -Parameter | Description | Default Value ---- | --- | --- -`emqxConfig` | Map of [configuration](https://www.emqx.io/docs/en/v5.0/admin/cfg.html) items -expressed as [environment variables](https://www.emqx.io/docs/en/v5.0/admin/cfg.html#environment-variables) (prefix `EMQX_` can be omitted) or using the configuration -files [namespaced dotted notation](https://www.emqx.io/docs/en/v5.0/admin/cfg.html#syntax) | `nil` -`emqxLicenseSecretName` | Name of the secret that holds the license information | `nil` +| Parameter | Description | Default Value | +|------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------|---------------| +| `emqxConfig` | Map of [configuration](https://www.emqx.io/docs/en/v5.0/admin/cfg.html) items | | +| expressed as [environment variables](https://www.emqx.io/docs/en/v5.0/admin/cfg.html#environment-variables) (prefix `EMQX_` can be omitted) or using the configuration | | | +| files [namespaced dotted notation](https://www.emqx.io/docs/en/v5.0/admin/cfg.html#syntax) | `nil` | | +| `emqxLicenseSecretName` | Name of the secret that holds the license information | `nil` | ## SSL settings `cert-manager` generates secrets with certificate data using the keys `tls.crt` and `tls.key`. The helm chart always mounts those keys as files to `/tmp/ssl/` @@ -137,9 +137,8 @@ In order to preserve the original client's IP address, you could change the emqx EMQX_LISTENERS__TCP__DEFAULT__PROXY_PROTOCOL: "true" ``` -With haproxy you'd also need the following ingress annotation: +With HAProxy you'd also need the following ingress annotation: ``` haproxy-ingress.github.io/proxy-protocol: "v2" ``` - diff --git a/git-blame-ignore-revs b/git-blame-ignore-revs index c1bb2f5ea..5e10071ca 100644 --- a/git-blame-ignore-revs +++ b/git-blame-ignore-revs @@ -37,3 +37,5 @@ a4feb3e6e95c18cb531416112e57520c5ba00d40 02c3f87b316e8370287d5cd46de4f103ffe48433 # erlfmt all remaining escripts 72eb34658d31fb38130421949cff262efab51139 +# erlfmt rebar.config files and bin/nodetool +5e100f52b8a530f4a952a4b20125ec37b38e2906 diff --git a/rebar.config b/rebar.config index 47151181c..755fc13c8 100644 --- a/rebar.config +++ b/rebar.config @@ -7,119 +7,132 @@ %% with rebar.config.erl module. Final result is written to %% rebar.config.rendered if environment DEBUG is set. -{edoc_opts, [{preprocess,true}]}. -{erl_opts, [warn_unused_vars,warn_shadow_vars,warn_unused_import, - warn_obsolete_guard,compressed, nowarn_unused_import, - {d, snk_kind, msg} - ]}. +{edoc_opts, [{preprocess, true}]}. +{erl_opts, [ + warn_unused_vars, + warn_shadow_vars, + warn_unused_import, + warn_obsolete_guard, + compressed, + nowarn_unused_import, + {d, snk_kind, msg} +]}. -{xref_checks,[undefined_function_calls,undefined_functions,locals_not_used, - deprecated_function_calls,warnings_as_errors,deprecated_functions]}. +{xref_checks, [ + undefined_function_calls, + undefined_functions, + locals_not_used, + deprecated_function_calls, + warnings_as_errors, + deprecated_functions +]}. %% Check the forbidden mnesia calls: -{xref_queries, - [ {"E || \"mnesia\":\"dirty_delete.*\"/\".*\" : Fun", []} - , {"E || \"mnesia\":\"transaction\"/\".*\" : Fun", []} - , {"E || \"mnesia\":\"async_dirty\"/\".*\" : Fun", []} - , {"E || \"mnesia\":\"clear_table\"/\".*\" : Fun", []} - , {"E || \"mnesia\":\"create_table\"/\".*\" : Fun", []} - , {"E || \"mnesia\":\"delete_table\"/\".*\" : Fun", []} - ]}. +{xref_queries, [ + {"E || \"mnesia\":\"dirty_delete.*\"/\".*\" : Fun", []}, + {"E || \"mnesia\":\"transaction\"/\".*\" : Fun", []}, + {"E || \"mnesia\":\"async_dirty\"/\".*\" : Fun", []}, + {"E || \"mnesia\":\"clear_table\"/\".*\" : Fun", []}, + {"E || \"mnesia\":\"create_table\"/\".*\" : Fun", []}, + {"E || \"mnesia\":\"delete_table\"/\".*\" : Fun", []} +]}. {dialyzer, [ {warnings, [unmatched_returns, error_handling]}, - {exclude_mods, [emqx_exproto_v_1_connection_unary_handler_bhvr, - emqx_exproto_v_1_connection_handler_client, - emqx_exproto_v_1_connection_handler_bhvr, - emqx_exproto_v_1_connection_adapter_client, - emqx_exproto_v_1_connection_adapter_bhvr, - emqx_exproto_v_1_connection_unary_handler_client, - emqx_exhook_v_2_hook_provider_client, - emqx_exhook_v_2_hook_provider_bhvr - ]}, + {exclude_mods, [ + emqx_exproto_v_1_connection_unary_handler_bhvr, + emqx_exproto_v_1_connection_handler_client, + emqx_exproto_v_1_connection_handler_bhvr, + emqx_exproto_v_1_connection_adapter_client, + emqx_exproto_v_1_connection_adapter_bhvr, + emqx_exproto_v_1_connection_unary_handler_client, + emqx_exhook_v_2_hook_provider_client, + emqx_exhook_v_2_hook_provider_bhvr + ]}, {plt_location, "."}, {plt_prefix, "emqx_dialyzer"}, {plt_apps, all_apps}, {statistics, true} - ] -}. +]}. {cover_opts, [verbose]}. {cover_export_enabled, true}. {cover_excl_mods, - [ %% generated protobuf modules - emqx_exproto_pb, - emqx_exhook_pb, - %% taken almost as-is from OTP - emqx_ssl_crl_cache - ]}. + %% generated protobuf modules + [ + emqx_exproto_pb, + emqx_exhook_pb, + %% taken almost as-is from OTP + emqx_ssl_crl_cache + ]}. %{provider_hooks, [{pre, [{release, {relup_helper, gen_appups}}]}]}. -{post_hooks,[]}. +{post_hooks, []}. -{deps, - [ {lc, {git, "https://github.com/emqx/lc.git", {tag, "0.3.2"}}} - , {redbug, {git, "https://github.com/emqx/redbug", {tag, "2.0.10"}}} - , {covertool, {git, "https://github.com/zmstone/covertool", {tag, "2.0.4.1"}}} - , {gpb, "4.19.9"} - , {typerefl, {git, "https://github.com/ieQu1/typerefl", {tag, "0.9.1"}}} - , {gun, {git, "https://github.com/emqx/gun", {tag, "1.3.10"}}} - , {ehttpc, {git, "https://github.com/emqx/ehttpc", {tag, "0.4.12"}}} - , {gproc, {git, "https://github.com/emqx/gproc", {tag, "0.9.0.1"}}} - , {jiffy, {git, "https://github.com/emqx/jiffy", {tag, "1.0.6"}}} - , {cowboy, {git, "https://github.com/emqx/cowboy", {tag, "2.9.2"}}} - , {esockd, {git, "https://github.com/emqx/esockd", {tag, "5.11.1"}}} - , {rocksdb, {git, "https://github.com/emqx/erlang-rocksdb", {tag, "1.8.0-emqx-2"}}} - , {ekka, {git, "https://github.com/emqx/ekka", {tag, "0.17.0"}}} - , {gen_rpc, {git, "https://github.com/emqx/gen_rpc", {tag, "3.3.1"}}} - , {grpc, {git, "https://github.com/emqx/grpc-erl", {tag, "0.6.12"}}} - , {minirest, {git, "https://github.com/emqx/minirest", {tag, "1.3.15"}}} - , {ecpool, {git, "https://github.com/emqx/ecpool", {tag, "0.5.7"}}} - , {replayq, {git, "https://github.com/emqx/replayq.git", {tag, "0.3.7"}}} - , {pbkdf2, {git, "https://github.com/emqx/erlang-pbkdf2.git", {tag, "2.0.4"}}} - , {emqtt, {git, "https://github.com/emqx/emqtt", {tag, "1.10.1"}}} - , {rulesql, {git, "https://github.com/emqx/rulesql", {tag, "0.1.7"}}} - , {observer_cli, "1.7.1"} % NOTE: depends on recon 2.5.x - , {system_monitor, {git, "https://github.com/ieQu1/system_monitor", {tag, "3.0.3"}}} - , {getopt, "1.0.2"} - , {snabbkaffe, {git, "https://github.com/kafka4beam/snabbkaffe.git", {tag, "1.0.8"}}} - , {hocon, {git, "https://github.com/emqx/hocon.git", {tag, "0.40.3"}}} - , {emqx_http_lib, {git, "https://github.com/emqx/emqx_http_lib.git", {tag, "0.5.3"}}} - , {esasl, {git, "https://github.com/emqx/esasl", {tag, "0.2.0"}}} - , {jose, {git, "https://github.com/potatosalad/erlang-jose", {tag, "1.11.2"}}} - , {telemetry, "1.1.0"} - , {hackney, {git, "https://github.com/emqx/hackney.git", {tag, "1.18.1-1"}}} +{deps, [ + {lc, {git, "https://github.com/emqx/lc.git", {tag, "0.3.2"}}}, + {redbug, {git, "https://github.com/emqx/redbug", {tag, "2.0.10"}}}, + {covertool, {git, "https://github.com/zmstone/covertool", {tag, "2.0.4.1"}}}, + {gpb, "4.19.9"}, + {typerefl, {git, "https://github.com/ieQu1/typerefl", {tag, "0.9.1"}}}, + {gun, {git, "https://github.com/emqx/gun", {tag, "1.3.10"}}}, + {ehttpc, {git, "https://github.com/emqx/ehttpc", {tag, "0.4.12"}}}, + {gproc, {git, "https://github.com/emqx/gproc", {tag, "0.9.0.1"}}}, + {jiffy, {git, "https://github.com/emqx/jiffy", {tag, "1.0.6"}}}, + {cowboy, {git, "https://github.com/emqx/cowboy", {tag, "2.9.2"}}}, + {esockd, {git, "https://github.com/emqx/esockd", {tag, "5.11.1"}}}, + {rocksdb, {git, "https://github.com/emqx/erlang-rocksdb", {tag, "1.8.0-emqx-2"}}}, + {ekka, {git, "https://github.com/emqx/ekka", {tag, "0.17.0"}}}, + {gen_rpc, {git, "https://github.com/emqx/gen_rpc", {tag, "3.3.1"}}}, + {grpc, {git, "https://github.com/emqx/grpc-erl", {tag, "0.6.12"}}}, + {minirest, {git, "https://github.com/emqx/minirest", {tag, "1.3.15"}}}, + {ecpool, {git, "https://github.com/emqx/ecpool", {tag, "0.5.7"}}}, + {replayq, {git, "https://github.com/emqx/replayq.git", {tag, "0.3.7"}}}, + {pbkdf2, {git, "https://github.com/emqx/erlang-pbkdf2.git", {tag, "2.0.4"}}}, + {emqtt, {git, "https://github.com/emqx/emqtt", {tag, "1.10.1"}}}, + {rulesql, {git, "https://github.com/emqx/rulesql", {tag, "0.1.7"}}}, + % NOTE: depends on recon 2.5.x + {observer_cli, "1.7.1"}, + {system_monitor, {git, "https://github.com/ieQu1/system_monitor", {tag, "3.0.3"}}}, + {getopt, "1.0.2"}, + {snabbkaffe, {git, "https://github.com/kafka4beam/snabbkaffe.git", {tag, "1.0.8"}}}, + {hocon, {git, "https://github.com/emqx/hocon.git", {tag, "0.40.3"}}}, + {emqx_http_lib, {git, "https://github.com/emqx/emqx_http_lib.git", {tag, "0.5.3"}}}, + {esasl, {git, "https://github.com/emqx/esasl", {tag, "0.2.0"}}}, + {jose, {git, "https://github.com/potatosalad/erlang-jose", {tag, "1.11.2"}}}, + {telemetry, "1.1.0"}, + {hackney, {git, "https://github.com/emqx/hackney.git", {tag, "1.18.1-1"}}}, %% to keep in sync with mix.exs - , {ssl_verify_fun, "1.1.7"} + {ssl_verify_fun, "1.1.7"}, %% in conflict by erlavro and rocketmq - , {jsone, {git, "https://github.com/emqx/jsone.git", {tag, "1.7.1"}}} - , {uuid, {git, "https://github.com/okeuday/uuid.git", {tag, "v2.0.6"}}} - , {ssl_verify_fun, "1.1.7"} - , {rfc3339, {git, "https://github.com/emqx/rfc3339.git", {tag, "0.2.3"}}} - , {bcrypt, {git, "https://github.com/emqx/erlang-bcrypt.git", {tag, "0.6.1"}}} - ]}. + {jsone, {git, "https://github.com/emqx/jsone.git", {tag, "1.7.1"}}}, + {uuid, {git, "https://github.com/okeuday/uuid.git", {tag, "v2.0.6"}}}, + {ssl_verify_fun, "1.1.7"}, + {rfc3339, {git, "https://github.com/emqx/rfc3339.git", {tag, "0.2.3"}}}, + {bcrypt, {git, "https://github.com/emqx/erlang-bcrypt.git", {tag, "0.6.1"}}} +]}. {xref_ignores, - [ %% schema registry is for enterprise - {emqx_schema_registry,get_all_schemas,0}, - {emqx_schema_api,format_schema,1}, - {emqx_schema_api,make_schema_params,1}, - {emqx_schema_parser,decode,3}, - {emqx_schema_parser,encode,3}, - {emqx_schema_registry,add_schema,1}, - {emqx_audit, log, 2}, - emqx_exhook_pb, % generated code for protobuf - emqx_exproto_pb % generated code for protobuf -]}. + %% schema registry is for enterprise + [ + {emqx_schema_registry, get_all_schemas, 0}, + {emqx_schema_api, format_schema, 1}, + {emqx_schema_api, make_schema_params, 1}, + {emqx_schema_parser, decode, 3}, + {emqx_schema_parser, encode, 3}, + {emqx_schema_registry, add_schema, 1}, + {emqx_audit, log, 2}, + % generated code for protobuf + emqx_exhook_pb, + % generated code for protobuf + emqx_exproto_pb + ]}. -{eunit_opts, - [ verbose - ]}. +{eunit_opts, [verbose]}. -{project_plugins, - [ erlfmt, +{project_plugins, [ + erlfmt, {rebar3_hex, "7.0.2"}, - {rebar3_sbom, - {git, "https://github.com/emqx/rebar3_sbom.git", {tag, "v0.6.1-1"}}} + {rebar3_sbom, {git, "https://github.com/emqx/rebar3_sbom.git", {tag, "v0.6.1-1"}}} ]}.