diff options
Diffstat (limited to 'dcae-policy/dcaepolicyplugin/discovery.py')
-rw-r--r-- | dcae-policy/dcaepolicyplugin/discovery.py | 67 |
1 files changed, 58 insertions, 9 deletions
diff --git a/dcae-policy/dcaepolicyplugin/discovery.py b/dcae-policy/dcaepolicyplugin/discovery.py index 8cdbde1..0517377 100644 --- a/dcae-policy/dcaepolicyplugin/discovery.py +++ b/dcae-policy/dcaepolicyplugin/discovery.py @@ -1,9 +1,5 @@ -"""client to talk to consul on standard port 8500""" - -# ============LICENSE_START======================================================= -# org.onap.dcae # ================================================================================ -# Copyright (c) 2017 AT&T Intellectual Property. All rights reserved. +# Copyright (c) 2017-2018 AT&T Intellectual Property. All rights reserved. # ================================================================================ # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -20,16 +16,69 @@ # # ECOMP is a trademark and service mark of AT&T Intellectual Property. +"""client to talk to consul on standard port 8500""" + +import base64 +import json + import requests +from cloudify import ctx +from cloudify.exceptions import NonRecoverableError + +# it is safe to assume that consul agent is at consul:8500 +# define consul alis in /etc/hosts on cloudify manager vm +# $ cat /etc/hosts +# 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 consul + +CONSUL_SERVICE_URL = "http://consul:8500/v1/catalog/service/{0}" +CONSUL_KV_MASK = "http://consul:8500/v1/kv/{0}" -# 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}" def discover_service_url(service_name): """find the service record in consul""" - response = requests.get(CONSUL_SERVICE_URL.format(service_name)) - response.raise_for_status() + service_url = CONSUL_SERVICE_URL.format(service_name) + ctx.logger.info("getting service_url at {0}".format(service_url)) + + try: + response = requests.get(service_url) + except requests.ConnectionError as ex: + raise NonRecoverableError( + "ConnectionError - failed to get {0}: {1}".format(service_url, str(ex))) + + 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)) + + try: + response = requests.get(kv_url) + except requests.ConnectionError as ex: + raise NonRecoverableError( + "ConnectionError - failed to get {0}: {1}".format(kv_url, str(ex))) + + ctx.logger.info("got {0} for kv at {1} response: {2}" + .format(response.status_code, kv_url, response.text)) + + if response.status_code != requests.codes.ok: + return + + 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) |