diff options
Diffstat (limited to 'dcae-policy/dcaepolicyplugin/discovery.py')
-rw-r--r-- | dcae-policy/dcaepolicyplugin/discovery.py | 51 |
1 files changed, 40 insertions, 11 deletions
diff --git a/dcae-policy/dcaepolicyplugin/discovery.py b/dcae-policy/dcaepolicyplugin/discovery.py index 45a061b..1faee08 100644 --- a/dcae-policy/dcaepolicyplugin/discovery.py +++ b/dcae-policy/dcaepolicyplugin/discovery.py @@ -18,25 +18,54 @@ """client to talk to consul on standard port 8500""" -import requests +import base64 +import json +import requests from cloudify import ctx # it is safe to assume that consul agent is at localhost:8500 along with cloudify manager CONSUL_SERVICE_URL = "http://localhost:8500/v1/catalog/service/{0}" +CONSUL_KV_MASK = "http://localhost:8500/v1/kv/{0}" + def discover_service_url(service_name): """find the service record in consul""" - service_url_url = CONSUL_SERVICE_URL.format(service_name) - ctx.logger.info("getting service_url at {0}".format(service_url_url)) + service_url = CONSUL_SERVICE_URL.format(service_name) + ctx.logger.info("getting service_url at {0}".format(service_url)) + + response = requests.get(service_url) + + ctx.logger.info("got {0} for service_url at {1} response: {2}" + .format(response.status_code, service_url, response.text)) + + if response.status_code != requests.codes.ok: + return + + resp_json = response.json() + if resp_json: + service = resp_json[0] + return "http://{0}:{1}".format(service["ServiceAddress"], service["ServicePort"]) + + +def discover_value(key): + """get the value for the key from consul-kv""" + kv_url = CONSUL_KV_MASK.format(key) + ctx.logger.info("getting kv at {0}".format(kv_url)) + + response = requests.get(kv_url) - response = requests.get(service_url_url) + ctx.logger.info("got {0} for kv at {1} response: {2}" + .format(response.status_code, kv_url, response.text)) - ctx.logger.info("got service_url at {0} status({1}) response: {2}" - .format(service_url_url, response.status_code, response.text)) + if response.status_code != requests.codes.ok: + return - if response.status_code == requests.codes.ok: - resp_json = response.json() - if resp_json: - service = resp_json[0] - return "http://{0}:{1}".format(service["ServiceAddress"], service["ServicePort"]) + data = response.json() + if not data: + ctx.logger.error("failed discover_value %s", key) + return + value = base64.b64decode(data[0]["Value"]).decode("utf-8") + ctx.logger.info("consul-kv key=%s value(%s) data=%s", + key, value, json.dumps(data)) + return json.loads(value) |