From c3a485a0a2805519a217575fd8c984b0312e9b43 Mon Sep 17 00:00:00 2001 From: Tommy Carpenter Date: Wed, 20 Sep 2017 15:11:00 -0400 Subject: Rename the cbs docker client Issue-ID: DCAEGEN2-60 Change-Id: Ia0d4726215efc1c2fe78bee1bdfdf1403e2c349c Signed-off-by: Tommy Carpenter --- onap-dcae-cbs-docker-client/.gitignore | 4 + onap-dcae-cbs-docker-client/MANIFEST.in | 1 + onap-dcae-cbs-docker-client/README.md | 31 +++ .../onap_dcae_cbs_docker_client/__init__.py | 19 ++ .../onap_dcae_cbs_docker_client/client.py | 85 +++++++ onap-dcae-cbs-docker-client/pom.xml | 248 +++++++++++++++++++++ onap-dcae-cbs-docker-client/requirements.txt | 1 + onap-dcae-cbs-docker-client/setup.py | 39 ++++ onap-dcae-cbs-docker-client/tox.ini | 11 + pom.xml | 2 +- python-cbs-docker-client/.gitignore | 4 - python-cbs-docker-client/MANIFEST.in | 1 - python-cbs-docker-client/README.md | 31 --- .../cbs_docker_client/__init__.py | 19 -- .../cbs_docker_client/client.py | 85 ------- python-cbs-docker-client/pom.xml | 248 --------------------- python-cbs-docker-client/requirements.txt | 1 - python-cbs-docker-client/setup.py | 39 ---- python-cbs-docker-client/tox.ini | 11 - 19 files changed, 440 insertions(+), 440 deletions(-) create mode 100644 onap-dcae-cbs-docker-client/.gitignore create mode 100644 onap-dcae-cbs-docker-client/MANIFEST.in create mode 100644 onap-dcae-cbs-docker-client/README.md create mode 100644 onap-dcae-cbs-docker-client/onap_dcae_cbs_docker_client/__init__.py create mode 100644 onap-dcae-cbs-docker-client/onap_dcae_cbs_docker_client/client.py create mode 100644 onap-dcae-cbs-docker-client/pom.xml create mode 100644 onap-dcae-cbs-docker-client/requirements.txt create mode 100644 onap-dcae-cbs-docker-client/setup.py create mode 100644 onap-dcae-cbs-docker-client/tox.ini delete mode 100644 python-cbs-docker-client/.gitignore delete mode 100644 python-cbs-docker-client/MANIFEST.in delete mode 100644 python-cbs-docker-client/README.md delete mode 100644 python-cbs-docker-client/cbs_docker_client/__init__.py delete mode 100644 python-cbs-docker-client/cbs_docker_client/client.py delete mode 100644 python-cbs-docker-client/pom.xml delete mode 100644 python-cbs-docker-client/requirements.txt delete mode 100644 python-cbs-docker-client/setup.py delete mode 100644 python-cbs-docker-client/tox.ini diff --git a/onap-dcae-cbs-docker-client/.gitignore b/onap-dcae-cbs-docker-client/.gitignore new file mode 100644 index 0000000..31c3000 --- /dev/null +++ b/onap-dcae-cbs-docker-client/.gitignore @@ -0,0 +1,4 @@ +dist/ +.DS_Store +*.egg-info/ +*.pyc diff --git a/onap-dcae-cbs-docker-client/MANIFEST.in b/onap-dcae-cbs-docker-client/MANIFEST.in new file mode 100644 index 0000000..f9bd145 --- /dev/null +++ b/onap-dcae-cbs-docker-client/MANIFEST.in @@ -0,0 +1 @@ +include requirements.txt diff --git a/onap-dcae-cbs-docker-client/README.md b/onap-dcae-cbs-docker-client/README.md new file mode 100644 index 0000000..b5ddd04 --- /dev/null +++ b/onap-dcae-cbs-docker-client/README.md @@ -0,0 +1,31 @@ +# Python CBS Docker Client + +Used for DCAE Dockerized microservices written in Python. Pulls your configuration from the config_binding_service. Expects that CONSUL_HOST and HOSTNAME are set as env variables, which is true in DCAE. + +# Client Usage + +## Development outside of Docker +To test your raw code without Docker, you will need to set the env variables CONSUL_HOST and HOSTNAME (name of your key to pull from) that are set in DCAEs Docker enviornment. +1. `CONSUL_HOST` is the hostname only of the Consul instance you are talking to +2. HOSTNAME is the name of your component in Consul + +## Usage in your code +``` +>>> from onap_dcae_cbs_docker_client import client +>>> client.get_config() +``` + +# Installation + +## Via pip +``` +pip install --extra-index-url https://YOUR_NEXUS_PYPI_SERVER/simple cbs-docker-client +``` + +## Via requirements.txt +Add the following to your requirements.txt file +``` +--extra-index-url https://YOUR_NEXUS_PYPI_SERVER/simple +onap-dcae-cbs-docker-client==[version] +``` + diff --git a/onap-dcae-cbs-docker-client/onap_dcae_cbs_docker_client/__init__.py b/onap-dcae-cbs-docker-client/onap_dcae_cbs_docker_client/__init__.py new file mode 100644 index 0000000..9e81f65 --- /dev/null +++ b/onap-dcae-cbs-docker-client/onap_dcae_cbs_docker_client/__init__.py @@ -0,0 +1,19 @@ +# org.onap.dcae +# ================================================================================ +# Copyright (c) 2017 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. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============LICENSE_END========================================================= +# +# ECOMP is a trademark and service mark of AT&T Intellectual Property. + diff --git a/onap-dcae-cbs-docker-client/onap_dcae_cbs_docker_client/client.py b/onap-dcae-cbs-docker-client/onap_dcae_cbs_docker_client/client.py new file mode 100644 index 0000000..4423995 --- /dev/null +++ b/onap-dcae-cbs-docker-client/onap_dcae_cbs_docker_client/client.py @@ -0,0 +1,85 @@ +# org.onap.dcae +# ================================================================================ +# Copyright (c) 2017 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. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============LICENSE_END========================================================= +# +# ECOMP is a trademark and service mark of AT&T Intellectual Property. + +import json +import requests +import os +import logging + +root = logging.getLogger() +logger = root.getChild(__name__) + +def _get_uri_from_consul(consul_url, name): + """ + Call consul's catalog + TODO: currently assumes there is only one service with this HOSTNAME + """ + url = "{0}/v1/catalog/service/{1}".format(consul_url, name) + logger.debug("Trying to lookup service: {0}".format(url)) + res = requests.get(url) + try: + res.raise_for_status() + services = res.json() + return "http://{0}:{1}".format(services[0]["ServiceAddress"], services[0]["ServicePort"]) + except Exception as e: + logger.error("Exception occured when querying Consul: either could not hit {0} or no service registered. Error code: {1}, Error Text: {2}".format(url, res.status_code, res.text)) + return None + +def _get_envs(): + """ + Returns HOSTNAME, CONSUL_HOST, CONFIG_BINDING_SERVICE or crashes for caller to deal with + """ + HOSTNAME = os.environ["HOSTNAME"] + CONSUL_HOST = os.environ["CONSUL_HOST"] + return HOSTNAME, CONSUL_HOST + +#Public +def get_config(): + """ + This call does not raise an exception if Consul or the CBS cannot complete the request. + It logs an error and returns {} if the config is not bindable. + It could be a temporary network outage. Call me again later. + + It will raise an exception if the necessary env parameters were not set because that is irrecoverable. + This function is called in my /heatlhcheck, so this will be caught early. + """ + + config = {} + + HOSTNAME, CONSUL_HOST = _get_envs() + + #not sure how I as the component developer is supposed to know consul port + consul_url = "http://{0}:8500".format(CONSUL_HOST) + + #get the CBS URL. Would not need the following hoorahrah if we had DNS. + cbs_url = _get_uri_from_consul(consul_url, "config_binding_service") + if cbs_url is None: + logger.error("Cannot bind config at this time, cbs is unreachable") + else: + #get my config + my_config_endpoint = "{0}/service_component/{1}".format(cbs_url, HOSTNAME) + res = requests.get(my_config_endpoint) + try: + res.raise_for_status() + config = res.json() + logger.info("get_config returned the following configuration: {0}".format(json.dumps(config))) + except: + logger.error("in get_config, the config binding service endpoint {0} blew up on me. Error code: {1}, Error text: {2}".format(my_config_endpoint, res.status_code, res.text)) + return config + diff --git a/onap-dcae-cbs-docker-client/pom.xml b/onap-dcae-cbs-docker-client/pom.xml new file mode 100644 index 0000000..f1b267e --- /dev/null +++ b/onap-dcae-cbs-docker-client/pom.xml @@ -0,0 +1,248 @@ + + + + 4.0.0 + + org.onap.dcaegen2.utils + utils + 1.0.0-SNAPSHOT + + org.onap.dcaegen2.utils + onap-dcae-cbs-docker-client + dcaegen2-utils-python-cbs-docker-client + 1.0.0-SNAPSHOT + http://maven.apache.org + + + UTF-8 + + . + + + + + py + Python + **/*.py + + + + + ${project.artifactId}-${project.version} + + + + + org.sonatype.plugins + nexus-staging-maven-plugin + 1.6.7 + + true + + + + org.apache.maven.plugins + maven-deploy-plugin + + 2.8 + + true + + + + + + org.apache.maven.plugins + maven-resources-plugin + 2.6 + + true + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.1 + + true + + + + + org.apache.maven.plugins + maven-jar-plugin + 2.4 + + + default-jar + + + + + + + org.apache.maven.plugins + maven-install-plugin + 2.4 + + true + + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.12.4 + + true + + + + + + + + + org.codehaus.mojo + exec-maven-plugin + 1.2.1 + + + clean phase script + clean + + exec + + + + ${project.artifactId} + clean + + + + + generate-sources script + generate-sources + + exec + + + + ${project.artifactId} + generate-sources + + + + + compile script + compile + + exec + + + + ${project.artifactId} + compile + + + + + package script + package + + exec + + + + ${project.artifactId} + package + + + + + test script + test + + exec + + + + ${project.artifactId} + test + + + + + install script + install + + exec + + + + ${project.artifactId} + install + + + + + deploy script + deploy + + exec + + + + ${project.artifactId} + deploy + + + + + + + + diff --git a/onap-dcae-cbs-docker-client/requirements.txt b/onap-dcae-cbs-docker-client/requirements.txt new file mode 100644 index 0000000..856c82c --- /dev/null +++ b/onap-dcae-cbs-docker-client/requirements.txt @@ -0,0 +1 @@ +requests==2.18.3 diff --git a/onap-dcae-cbs-docker-client/setup.py b/onap-dcae-cbs-docker-client/setup.py new file mode 100644 index 0000000..cef2525 --- /dev/null +++ b/onap-dcae-cbs-docker-client/setup.py @@ -0,0 +1,39 @@ +# org.onap.dcae +# ================================================================================ +# Copyright (c) 2017 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. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============LICENSE_END========================================================= +# +# ECOMP is a trademark and service mark of AT&T Intellectual Property. + +import os +from setuptools import setup, find_packages +from pip.req import parse_requirements +from pip.download import PipSession + +install_reqs = parse_requirements("requirements.txt", session=PipSession()) +reqs = [str(ir.req) for ir in install_reqs] + +setup( + name = "onap_dcae_cbs_docker_client", + description = "very lightweight client for a DCAE dockerized component to get it's config from the CBS", + version = "0.0.2", + packages=find_packages(), + author = "Tommy Carpenter", + author_email = "tommy at eh tee tee.com", + license = "", + keywords = "", + url = "", + install_requires=reqs +) diff --git a/onap-dcae-cbs-docker-client/tox.ini b/onap-dcae-cbs-docker-client/tox.ini new file mode 100644 index 0000000..987b009 --- /dev/null +++ b/onap-dcae-cbs-docker-client/tox.ini @@ -0,0 +1,11 @@ +# content of: tox.ini , put in same dir as setup.py +[tox] +envlist = py27,py35 + +[testenv] +deps= + -rrequirements.txt + pytest + coverage + pytest-cov +commands=pytest --junitxml xunit-results.xml --cov {envsitepackagesdir} --cov-report=xml diff --git a/pom.xml b/pom.xml index 1edd6d4..304e891 100644 --- a/pom.xml +++ b/pom.xml @@ -33,7 +33,7 @@ ECOMP is a trademark and service mark of AT&T Intellectual Property. http://maven.apache.org pom - python-cbs-docker-client + onap-dcae-cbs-docker-client python-dcae-policy python-discovery-client python-dockering diff --git a/python-cbs-docker-client/.gitignore b/python-cbs-docker-client/.gitignore deleted file mode 100644 index 31c3000..0000000 --- a/python-cbs-docker-client/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -dist/ -.DS_Store -*.egg-info/ -*.pyc diff --git a/python-cbs-docker-client/MANIFEST.in b/python-cbs-docker-client/MANIFEST.in deleted file mode 100644 index f9bd145..0000000 --- a/python-cbs-docker-client/MANIFEST.in +++ /dev/null @@ -1 +0,0 @@ -include requirements.txt diff --git a/python-cbs-docker-client/README.md b/python-cbs-docker-client/README.md deleted file mode 100644 index 3a323a1..0000000 --- a/python-cbs-docker-client/README.md +++ /dev/null @@ -1,31 +0,0 @@ -# Python CBS Docker Client - -Used for DCAE Dockerized microservices written in Python. Pulls your configuration from the config_binding_service. Expects that CONSUL_HOST and HOSTNAME are set as env variables, which is true in DCAE. - -# Client Usage - -## Development outside of Docker -To test your raw code without Docker, you will need to set the env variables CONSUL_HOST and HOSTNAME (name of your key to pull from) that are set in DCAEs Docker enviornment. -1. `CONSUL_HOST` is the hostname only of the Consul instance you are talking to -2. HOSTNAME is the name of your component in Consul - -## Usage in your code -``` ->>> from cbs_docker_client import client ->>> client.get_config() -``` - -# Installation - -## Via pip -``` -pip install --extra-index-url https://YOUR_NEXUS_PYPI_SERVER/simple cbs-docker-client -``` - -## Via requirements.txt -Add the following to your requirements.txt file -``` ---extra-index-url https://YOUR_NEXUS_PYPI_SERVER/simple -cbs-docker-client==0.0.1 -``` - diff --git a/python-cbs-docker-client/cbs_docker_client/__init__.py b/python-cbs-docker-client/cbs_docker_client/__init__.py deleted file mode 100644 index 9e81f65..0000000 --- a/python-cbs-docker-client/cbs_docker_client/__init__.py +++ /dev/null @@ -1,19 +0,0 @@ -# org.onap.dcae -# ================================================================================ -# Copyright (c) 2017 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. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# ============LICENSE_END========================================================= -# -# ECOMP is a trademark and service mark of AT&T Intellectual Property. - diff --git a/python-cbs-docker-client/cbs_docker_client/client.py b/python-cbs-docker-client/cbs_docker_client/client.py deleted file mode 100644 index 4423995..0000000 --- a/python-cbs-docker-client/cbs_docker_client/client.py +++ /dev/null @@ -1,85 +0,0 @@ -# org.onap.dcae -# ================================================================================ -# Copyright (c) 2017 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. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# ============LICENSE_END========================================================= -# -# ECOMP is a trademark and service mark of AT&T Intellectual Property. - -import json -import requests -import os -import logging - -root = logging.getLogger() -logger = root.getChild(__name__) - -def _get_uri_from_consul(consul_url, name): - """ - Call consul's catalog - TODO: currently assumes there is only one service with this HOSTNAME - """ - url = "{0}/v1/catalog/service/{1}".format(consul_url, name) - logger.debug("Trying to lookup service: {0}".format(url)) - res = requests.get(url) - try: - res.raise_for_status() - services = res.json() - return "http://{0}:{1}".format(services[0]["ServiceAddress"], services[0]["ServicePort"]) - except Exception as e: - logger.error("Exception occured when querying Consul: either could not hit {0} or no service registered. Error code: {1}, Error Text: {2}".format(url, res.status_code, res.text)) - return None - -def _get_envs(): - """ - Returns HOSTNAME, CONSUL_HOST, CONFIG_BINDING_SERVICE or crashes for caller to deal with - """ - HOSTNAME = os.environ["HOSTNAME"] - CONSUL_HOST = os.environ["CONSUL_HOST"] - return HOSTNAME, CONSUL_HOST - -#Public -def get_config(): - """ - This call does not raise an exception if Consul or the CBS cannot complete the request. - It logs an error and returns {} if the config is not bindable. - It could be a temporary network outage. Call me again later. - - It will raise an exception if the necessary env parameters were not set because that is irrecoverable. - This function is called in my /heatlhcheck, so this will be caught early. - """ - - config = {} - - HOSTNAME, CONSUL_HOST = _get_envs() - - #not sure how I as the component developer is supposed to know consul port - consul_url = "http://{0}:8500".format(CONSUL_HOST) - - #get the CBS URL. Would not need the following hoorahrah if we had DNS. - cbs_url = _get_uri_from_consul(consul_url, "config_binding_service") - if cbs_url is None: - logger.error("Cannot bind config at this time, cbs is unreachable") - else: - #get my config - my_config_endpoint = "{0}/service_component/{1}".format(cbs_url, HOSTNAME) - res = requests.get(my_config_endpoint) - try: - res.raise_for_status() - config = res.json() - logger.info("get_config returned the following configuration: {0}".format(json.dumps(config))) - except: - logger.error("in get_config, the config binding service endpoint {0} blew up on me. Error code: {1}, Error text: {2}".format(my_config_endpoint, res.status_code, res.text)) - return config - diff --git a/python-cbs-docker-client/pom.xml b/python-cbs-docker-client/pom.xml deleted file mode 100644 index d426bcc..0000000 --- a/python-cbs-docker-client/pom.xml +++ /dev/null @@ -1,248 +0,0 @@ - - - - 4.0.0 - - org.onap.dcaegen2.utils - utils - 1.0.0-SNAPSHOT - - org.onap.dcaegen2.utils - python-cbs-docker-client - dcaegen2-utils-python-cbs-docker-client - 1.0.0-SNAPSHOT - http://maven.apache.org - - - UTF-8 - - . - - - - - py - Python - **/*.py - - - - - ${project.artifactId}-${project.version} - - - - - org.sonatype.plugins - nexus-staging-maven-plugin - 1.6.7 - - true - - - - org.apache.maven.plugins - maven-deploy-plugin - - 2.8 - - true - - - - - - org.apache.maven.plugins - maven-resources-plugin - 2.6 - - true - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.1 - - true - - - - - org.apache.maven.plugins - maven-jar-plugin - 2.4 - - - default-jar - - - - - - - org.apache.maven.plugins - maven-install-plugin - 2.4 - - true - - - - - org.apache.maven.plugins - maven-surefire-plugin - 2.12.4 - - true - - - - - - - - - org.codehaus.mojo - exec-maven-plugin - 1.2.1 - - - clean phase script - clean - - exec - - - - ${project.artifactId} - clean - - - - - generate-sources script - generate-sources - - exec - - - - ${project.artifactId} - generate-sources - - - - - compile script - compile - - exec - - - - ${project.artifactId} - compile - - - - - package script - package - - exec - - - - ${project.artifactId} - package - - - - - test script - test - - exec - - - - ${project.artifactId} - test - - - - - install script - install - - exec - - - - ${project.artifactId} - install - - - - - deploy script - deploy - - exec - - - - ${project.artifactId} - deploy - - - - - - - - diff --git a/python-cbs-docker-client/requirements.txt b/python-cbs-docker-client/requirements.txt deleted file mode 100644 index 856c82c..0000000 --- a/python-cbs-docker-client/requirements.txt +++ /dev/null @@ -1 +0,0 @@ -requests==2.18.3 diff --git a/python-cbs-docker-client/setup.py b/python-cbs-docker-client/setup.py deleted file mode 100644 index 7b8ebdb..0000000 --- a/python-cbs-docker-client/setup.py +++ /dev/null @@ -1,39 +0,0 @@ -# org.onap.dcae -# ================================================================================ -# Copyright (c) 2017 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. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# ============LICENSE_END========================================================= -# -# ECOMP is a trademark and service mark of AT&T Intellectual Property. - -import os -from setuptools import setup, find_packages -from pip.req import parse_requirements -from pip.download import PipSession - -install_reqs = parse_requirements("requirements.txt", session=PipSession()) -reqs = [str(ir.req) for ir in install_reqs] - -setup( - name = "cbs_docker_client", - description = "very lightweight client for a DCAE dockerized component to get it's config from the CBS", - version = "0.0.1", - packages=find_packages(), - author = "Tommy Carpenter", - author_email = "tommy at eh tee tee.com", - license = "", - keywords = "", - url = "", - install_requires=reqs -) diff --git a/python-cbs-docker-client/tox.ini b/python-cbs-docker-client/tox.ini deleted file mode 100644 index 987b009..0000000 --- a/python-cbs-docker-client/tox.ini +++ /dev/null @@ -1,11 +0,0 @@ -# content of: tox.ini , put in same dir as setup.py -[tox] -envlist = py27,py35 - -[testenv] -deps= - -rrequirements.txt - pytest - coverage - pytest-cov -commands=pytest --junitxml xunit-results.xml --cov {envsitepackagesdir} --cov-report=xml -- cgit 1.2.3-korg