From a8c7bf1ebe2716f568b6ac0ecdc844f95985fecb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erik=20Hedenstro=CC=88m?= <erik@hedenstroem.com> Date: Fri, 30 Sep 2016 15:33:15 +0200 Subject: [PATCH] Added tools to README. Added checking out resolver output to make sure it's a proplist. --- README.md | 16 ++++++++++++++++ apps/consul_proxy/src/consul_proxy_router.erl | 8 +++++++- apps/consul_proxy/src/consul_proxy_utils.erl | 11 ++++++++++- 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 2e50a5d..bcc66fe 100644 --- a/README.md +++ b/README.md @@ -155,3 +155,19 @@ Load Balancing Logging ------- + +Tools +----- + +### Hijack + +See the [project page](https://gitlab.hedenstroem.com/erlang-ninja/hijack) on details of how to use and where to [download](http://s3.erlang.ninja/consul_proxy/extras/hijack) from. + + +### Consul Backup + +Used to backup the KEY/VALUE data from consul to a file. It can also restore KEY/VALUE data from a file. Download it [here](http://s3.erlang.ninja/consul_proxy/extras/consul-backup). + +### Password generator + +Use the password generator to create username:password values for the Auth middleware. It must also be used to generate passwords for the hijack configuration. Download it [here](http://s3.erlang.ninja/consul_proxy/extras/genpasswd). diff --git a/apps/consul_proxy/src/consul_proxy_router.erl b/apps/consul_proxy/src/consul_proxy_router.erl index 3baacc3..7e793c9 100644 --- a/apps/consul_proxy/src/consul_proxy_router.erl +++ b/apps/consul_proxy/src/consul_proxy_router.erl @@ -162,7 +162,13 @@ lookup_resolver(_Domain, _Upstream, _Properties, undefined, _CacheFlag) -> lookup_resolver(Domain, Upstream, Properties, ServiceResolver, _CacheFlag) -> case consul_proxy_utils:eval_script(ServiceResolver, build_script_vars(Properties, Upstream)) of {ok, Result} -> - lookup_services(Domain, Upstream, Result, false); + case consul_proxy_utils:is_proplist(Result) of + true -> + lookup_services(Domain, Upstream, Result, false); + false -> + lager:error("Script '~s' result is not a proplist: ~p", [ServiceResolver, Result]), + {error, route_lookup_failed} + end; {error, Reason} -> lager:error("Failed to evaluate '~s': ~p", [ServiceResolver, Reason]), {error, route_lookup_failed} diff --git a/apps/consul_proxy/src/consul_proxy_utils.erl b/apps/consul_proxy/src/consul_proxy_utils.erl index cb0dddd..e8a90f7 100644 --- a/apps/consul_proxy/src/consul_proxy_utils.erl +++ b/apps/consul_proxy/src/consul_proxy_utils.erl @@ -12,7 +12,8 @@ cache_get/1, cache_add/2, cache_purge/0, - cache_size/0 + cache_size/0, + is_proplist/1 ]). -include("consul_proxy.hrl"). @@ -296,3 +297,11 @@ cache_purge() -> -spec cache_size() -> non_neg_integer(). cache_size() -> lru:size(consul_cache). + +-spec is_proplist(List :: term()) -> boolean(). +is_proplist([]) -> + true; +is_proplist([{_, _} | L]) -> + is_proplist(L); +is_proplist(_) -> + false. -- GitLab