From c10d154dab2ea227e297fc12662fac919ff1a68e Mon Sep 17 00:00:00 2001 From: zhanghongtong Date: Fri, 9 Jul 2021 10:18:20 +0800 Subject: [PATCH] chore(connector): update schema file Signed-off-by: zhanghongtong --- apps/emqx_authz/src/emqx_authz.erl | 9 +--- apps/emqx_authz/src/emqx_authz_schema.erl | 47 +++++++++---------- .../test/emqx_authz_mongo_SUITE.erl | 2 +- .../test/emqx_authz_mysql_SUITE.erl | 2 +- .../test/emqx_authz_pgsql_SUITE.erl | 2 +- .../test/emqx_authz_redis_SUITE.erl | 2 +- .../src/emqx_connector_mongo.erl | 14 +++--- .../src/emqx_connector_mysql.erl | 3 ++ .../src/emqx_connector_pgsql.erl | 3 ++ .../src/emqx_connector_redis.erl | 10 ++-- .../src/emqx_connector_schema_lib.erl | 2 + .../src/emqx_data_bridge_schema.erl | 20 ++++---- .../src/emqx_resource_validator.erl | 2 +- 13 files changed, 59 insertions(+), 59 deletions(-) diff --git a/apps/emqx_authz/src/emqx_authz.erl b/apps/emqx_authz/src/emqx_authz.erl index 725d884e1..78aa47d91 100644 --- a/apps/emqx_authz/src/emqx_authz.erl +++ b/apps/emqx_authz/src/emqx_authz.erl @@ -64,15 +64,10 @@ create_resource(#{type := DB, config := Config } = Rule) -> ResourceID = iolist_to_binary([io_lib:format("~s_~s",[?APP, DB]), "_", integer_to_list(erlang:system_time())]), - NConfig = case DB of - redis -> #{config => Config }; - mongo -> #{config => Config }; - _ -> Config - end, - case emqx_resource:check_and_create( + case emqx_resource:create( ResourceID, list_to_existing_atom(io_lib:format("~s_~s",[emqx_connector, DB])), - NConfig) + Config) of {ok, _} -> Rule#{resource_id => ResourceID}; diff --git a/apps/emqx_authz/src/emqx_authz_schema.erl b/apps/emqx_authz/src/emqx_authz_schema.erl index 0b6a1d107..f1a79db25 100644 --- a/apps/emqx_authz/src/emqx_authz_schema.erl +++ b/apps/emqx_authz/src/emqx_authz_schema.erl @@ -16,30 +16,20 @@ structs() -> ["emqx_authz"]. fields("emqx_authz") -> [ {rules, rules()} ]; -fields(mongo_connector) -> - [ {principal, principal()} - , {type, #{type => hoconsc:enum([mongo])}} - , {config, #{type => map()}} - , {collection, #{type => atom()}} +fields(mongo) -> + connector_fields(mongo) ++ + [ {collection, #{type => atom()}} , {find, #{type => map()}} ]; -fields(redis_connector) -> - [ {principal, principal()} - , {type, #{type => hoconsc:enum([redis])}} - , {config, #{type => hoconsc:union( - [ hoconsc:ref(emqx_connector_redis, cluster) - , hoconsc:ref(emqx_connector_redis, sentinel) - , hoconsc:ref(emqx_connector_redis, single) - ])} - } - , {cmd, query()} - ]; -fields(sql_connector) -> - [ {principal, principal() } - , {type, #{type => hoconsc:enum([mysql, pgsql])}} - , {config, #{type => map()}} - , {sql, query()} - ]; +fields(redis) -> + connector_fields(redis) ++ + [ {cmd, query()} ]; +fields(mysql) -> + connector_fields(mysql) ++ + [ {sql, query()} ]; +fields(pgsql) -> + connector_fields(pgsql) ++ + [ {sql, query()} ]; fields(simple_rule) -> [ {permission, #{type => permission()}} , {action, #{type => action()}} @@ -88,9 +78,10 @@ union_array(Item) when is_list(Item) -> rules() -> #{type => union_array( [ hoconsc:ref(?MODULE, simple_rule) - , hoconsc:ref(?MODULE, sql_connector) - , hoconsc:ref(?MODULE, redis_connector) - , hoconsc:ref(?MODULE, mongo_connector) + , hoconsc:ref(?MODULE, mysql) + , hoconsc:ref(?MODULE, pgsql) + , hoconsc:ref(?MODULE, redis) + , hoconsc:ref(?MODULE, mongo) ]) }. @@ -115,3 +106,9 @@ query() -> end end }. + +connector_fields(DB) -> + Mod = list_to_existing_atom(io_lib:format("~s_~s",[emqx_connector, DB])), + [ {principal, principal()} + , {type, #{type => DB}} + ] ++ Mod:fields(""). diff --git a/apps/emqx_authz/test/emqx_authz_mongo_SUITE.erl b/apps/emqx_authz/test/emqx_authz_mongo_SUITE.erl index daf4d1722..d2792e388 100644 --- a/apps/emqx_authz/test/emqx_authz_mongo_SUITE.erl +++ b/apps/emqx_authz/test/emqx_authz_mongo_SUITE.erl @@ -30,7 +30,7 @@ groups() -> init_per_suite(Config) -> meck:new(emqx_resource, [non_strict, passthrough, no_history, no_link]), - meck:expect(emqx_resource, check_and_create, fun(_, _, _) -> {ok, meck_data} end ), + meck:expect(emqx_resource, create, fun(_, _, _) -> {ok, meck_data} end ), ok = emqx_ct_helpers:start_apps([emqx_authz], fun set_special_configs/1), Config. diff --git a/apps/emqx_authz/test/emqx_authz_mysql_SUITE.erl b/apps/emqx_authz/test/emqx_authz_mysql_SUITE.erl index edc35ca45..a9acf5e36 100644 --- a/apps/emqx_authz/test/emqx_authz_mysql_SUITE.erl +++ b/apps/emqx_authz/test/emqx_authz_mysql_SUITE.erl @@ -30,7 +30,7 @@ groups() -> init_per_suite(Config) -> meck:new(emqx_resource, [non_strict, passthrough, no_history, no_link]), - meck:expect(emqx_resource, check_and_create, fun(_, _, _) -> {ok, meck_data} end ), + meck:expect(emqx_resource, create, fun(_, _, _) -> {ok, meck_data} end ), ok = emqx_ct_helpers:start_apps([emqx_authz], fun set_special_configs/1), Config. diff --git a/apps/emqx_authz/test/emqx_authz_pgsql_SUITE.erl b/apps/emqx_authz/test/emqx_authz_pgsql_SUITE.erl index d5f89bcad..03bec2415 100644 --- a/apps/emqx_authz/test/emqx_authz_pgsql_SUITE.erl +++ b/apps/emqx_authz/test/emqx_authz_pgsql_SUITE.erl @@ -30,7 +30,7 @@ groups() -> init_per_suite(Config) -> meck:new(emqx_resource, [non_strict, passthrough, no_history, no_link]), - meck:expect(emqx_resource, check_and_create, fun(_, _, _) -> {ok, meck_data} end ), + meck:expect(emqx_resource, create, fun(_, _, _) -> {ok, meck_data} end ), ok = emqx_ct_helpers:start_apps([emqx_authz], fun set_special_configs/1), Config. diff --git a/apps/emqx_authz/test/emqx_authz_redis_SUITE.erl b/apps/emqx_authz/test/emqx_authz_redis_SUITE.erl index 0d7ffa9d8..7530c3183 100644 --- a/apps/emqx_authz/test/emqx_authz_redis_SUITE.erl +++ b/apps/emqx_authz/test/emqx_authz_redis_SUITE.erl @@ -30,7 +30,7 @@ groups() -> init_per_suite(Config) -> meck:new(emqx_resource, [non_strict, passthrough, no_history, no_link]), - meck:expect(emqx_resource, check_and_create, fun(_, _, _) -> {ok, meck_data} end ), + meck:expect(emqx_resource, create, fun(_, _, _) -> {ok, meck_data} end ), ok = emqx_ct_helpers:start_apps([emqx_authz], fun set_special_configs/1), Config. diff --git a/apps/emqx_connector/src/emqx_connector_mongo.erl b/apps/emqx_connector/src/emqx_connector_mongo.erl index 3397fabda..6fac3cb26 100644 --- a/apps/emqx_connector/src/emqx_connector_mongo.erl +++ b/apps/emqx_connector/src/emqx_connector_mongo.erl @@ -88,24 +88,24 @@ on_jsonify(Config) -> Config. %% =================================================================== -on_start(InstId, #{config := #{server := Server, - mongo_type := single} = Config}) -> +on_start(InstId, Config = #{server := Server, + mongo_type := single}) -> logger:info("starting mongodb connector: ~p, config: ~p", [InstId, Config]), Opts = [{type, single}, {hosts, [Server]} ], do_start(InstId, Opts, Config); -on_start(InstId, #{config := #{servers := Servers, - mongo_type := rs, - replicaset_name := RsName} = Config}) -> +on_start(InstId, Config = #{servers := Servers, + mongo_type := rs, + replicaset_name := RsName}) -> logger:info("starting mongodb connector: ~p, config: ~p", [InstId, Config]), Opts = [{type, {rs, RsName}}, {hosts, Servers}], do_start(InstId, Opts, Config); -on_start(InstId, #{config := #{servers := Servers, - mongo_type := sharded} = Config}) -> +on_start(InstId, Config = #{servers := Servers, + mongo_type := sharded}) -> logger:info("starting mongodb connector: ~p, config: ~p", [InstId, Config]), Opts = [{type, sharded}, {hosts, Servers} diff --git a/apps/emqx_connector/src/emqx_connector_mysql.erl b/apps/emqx_connector/src/emqx_connector_mysql.erl index a606bb82d..6a5d93ca2 100644 --- a/apps/emqx_connector/src/emqx_connector_mysql.erl +++ b/apps/emqx_connector/src/emqx_connector_mysql.erl @@ -37,6 +37,9 @@ structs() -> [""]. fields("") -> + [{config, #{type => hoconsc:ref(?MODULE, config)}}]; + +fields(config) -> emqx_connector_schema_lib:relational_db_fields() ++ emqx_connector_schema_lib:ssl_fields(). diff --git a/apps/emqx_connector/src/emqx_connector_pgsql.erl b/apps/emqx_connector/src/emqx_connector_pgsql.erl index ddcc2a7c7..e89ab7401 100644 --- a/apps/emqx_connector/src/emqx_connector_pgsql.erl +++ b/apps/emqx_connector/src/emqx_connector_pgsql.erl @@ -38,6 +38,9 @@ structs() -> [""]. fields("") -> + [{config, #{type => hoconsc:ref(?MODULE, config)}}]; + +fields(config) -> emqx_connector_schema_lib:relational_db_fields() ++ emqx_connector_schema_lib:ssl_fields(). diff --git a/apps/emqx_connector/src/emqx_connector_redis.erl b/apps/emqx_connector/src/emqx_connector_redis.erl index 0df12185d..1ea31ced8 100644 --- a/apps/emqx_connector/src/emqx_connector_redis.erl +++ b/apps/emqx_connector/src/emqx_connector_redis.erl @@ -78,11 +78,11 @@ on_jsonify(Config) -> Config. %% =================================================================== -on_start(InstId, #{config :=#{redis_type := Type, - database := Database, - pool_size := PoolSize, - auto_reconnect := AutoReconn, - ssl := SSL } = Config}) -> +on_start(InstId, #{redis_type := Type, + database := Database, + pool_size := PoolSize, + auto_reconnect := AutoReconn, + ssl := SSL } = Config) -> logger:info("starting redis connector: ~p, config: ~p", [InstId, Config]), Servers = case Type of single -> [{servers, [maps:get(server, Config)]}]; diff --git a/apps/emqx_connector/src/emqx_connector_schema_lib.erl b/apps/emqx_connector/src/emqx_connector_schema_lib.erl index 743d37ae3..4f43a3bd4 100644 --- a/apps/emqx_connector/src/emqx_connector_schema_lib.erl +++ b/apps/emqx_connector/src/emqx_connector_schema_lib.erl @@ -86,10 +86,12 @@ relational_db_fields() -> ]. server(type) -> emqx_schema:ip_port(); +server(nullable) -> false; server(validator) -> [?REQUIRED("the field 'server' is required")]; server(_) -> undefined. database(type) -> binary(); +database(nullable) -> false; database(validator) -> [?REQUIRED("the field 'database' is required")]; database(_) -> undefined. diff --git a/apps/emqx_data_bridge/src/emqx_data_bridge_schema.erl b/apps/emqx_data_bridge/src/emqx_data_bridge_schema.erl index b4749af0e..066d72096 100644 --- a/apps/emqx_data_bridge/src/emqx_data_bridge_schema.erl +++ b/apps/emqx_data_bridge/src/emqx_data_bridge_schema.erl @@ -5,11 +5,6 @@ %%====================================================================================== %% Hocon Schema Definitions --define(BRIDGE_FIELDS(T), - [{name, hoconsc:t(typerefl:binary())}, - {type, hoconsc:t(typerefl:atom(T))}, - {config, hoconsc:t(hoconsc:ref(list_to_atom("emqx_connector_"++atom_to_list(T)), ""))}]). - -define(TYPES, [mysql, pgsql, mongo, redis, ldap]). -define(BRIDGES, [hoconsc:ref(?MODULE, T) || T <- ?TYPES]). @@ -19,8 +14,13 @@ fields("emqx_data_bridge") -> [{bridges, #{type => hoconsc:array(hoconsc:union(?BRIDGES)), default => []}}]; -fields(mysql) -> ?BRIDGE_FIELDS(mysql); -fields(pgsql) -> ?BRIDGE_FIELDS(pgsql); -fields(mongo) -> ?BRIDGE_FIELDS(mongo); -fields(redis) -> ?BRIDGE_FIELDS(redis); -fields(ldap) -> ?BRIDGE_FIELDS(ldap). +fields(mysql) -> connector_fields(mysql); +fields(pgsql) -> connector_fields(pgsql); +fields(mongo) -> connector_fields(mongo); +fields(redis) -> connector_fields(redis); +fields(ldap) -> connector_fields(ldap). + +connector_fields(DB) -> + Mod = list_to_existing_atom(io_lib:format("~s_~s",[emqx_connector, DB])), + [{name, hoconsc:t(typerefl:binary())}, + {type, #{type => DB}}] ++ Mod:fields(""). diff --git a/apps/emqx_resource/src/emqx_resource_validator.erl b/apps/emqx_resource/src/emqx_resource_validator.erl index e9517f160..519ad4095 100644 --- a/apps/emqx_resource/src/emqx_resource_validator.erl +++ b/apps/emqx_resource/src/emqx_resource_validator.erl @@ -39,7 +39,7 @@ enum(Items) -> end. required(ErrMsg) -> - fun(undefined) -> {error, ErrMsg}; + fun(<<>>) -> {error, ErrMsg}; (_) -> ok end.