From 4a02e289d08e2a9d6203b6e72e2a7c8bd3228070 Mon Sep 17 00:00:00 2001 From: shabs2020 Date: Wed, 5 May 2021 13:20:45 +0200 Subject: Enable Adapter to work behind proxy Adapter is now capable of metadata installation during docker image generation both with and without proxy. Issue-ID: DCAEGEN2-2755 Signed-off-by: shabs2020 Change-Id: Icc428db4afcf71103828683f3ac3b4b6d22ec1d0 Signed-off-by: shabs2020 --- .../acumos-deployment/resources/config/config.yaml | 3 +++ adapter/acumos/Changelog.md | 3 +++ adapter/acumos/aoconversion/docker_gen.py | 31 ++++++++++++++-------- adapter/acumos/aoconversion/scanner.py | 7 ++++- adapter/acumos/pom.xml | 4 ++- adapter/acumos/setup.py | 4 ++- adapter/acumos/tests/test_convert.py | 4 ++- adapter/acumos/tests/test_docker.py | 13 ++++++--- adapter/acumos/tests/test_fed.py | 4 ++- 9 files changed, 54 insertions(+), 19 deletions(-) diff --git a/adapter/acumos-deployment/resources/config/config.yaml b/adapter/acumos-deployment/resources/config/config.yaml index 434d458..e6dc4e3 100644 --- a/adapter/acumos-deployment/resources/config/config.yaml +++ b/adapter/acumos-deployment/resources/config/config.yaml @@ -7,5 +7,8 @@ certfile: /run/certs/cert.pem dockerregistry: {{ .Values.dockerTargetRegistry }} dockeruser: {{ .Values.dockerUser }} dockerpass: '@/run/pass/dpass' +http_proxy: {{ .Values.http_proxy }} +https_proxy: {{ .Values.https_proxy }} +no_proxy: {{ .Values.http_proxy }} {{ $firstPort := index .Values.service.ports 0 -}} port: {{ $firstPort.port }} diff --git a/adapter/acumos/Changelog.md b/adapter/acumos/Changelog.md index 73570fd..736bcea 100644 --- a/adapter/acumos/Changelog.md +++ b/adapter/acumos/Changelog.md @@ -3,6 +3,9 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/). + +## [1.0.5] - 5/05/2021 + * Enhance adapter to also work behind proxy. ## [1.0.4] - 1/07/2021 * Select metadata.json with additional name search in case of multiple json artifacts (Fix for DCAEGEN2-2578) ## [1.0.3] - 7/28/2020 diff --git a/adapter/acumos/aoconversion/docker_gen.py b/adapter/acumos/aoconversion/docker_gen.py index bf54cfc..07cc9d7 100644 --- a/adapter/acumos/aoconversion/docker_gen.py +++ b/adapter/acumos/aoconversion/docker_gen.py @@ -3,6 +3,8 @@ # ============================================================================= # Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. # ============================================================================= +# Copyright (c) 2021 highstreet technologies GmbH. 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 @@ -21,20 +23,26 @@ from docker import APIClient from aoconversion import exceptions, utils -def _generate_dockerfile(meta, model_name): +def _generate_dockerfile(meta, model_name, http_proxy, https_proxy, no_proxy): """ bind the templated docker string """ - docker_template = """ - FROM python:{VERSION} + python_version = meta["runtime"]["version"] + docker_template = f''' + FROM python:{python_version} - ENV MODELNAME {MODELNAME} + ENV MODELNAME {model_name} RUN mkdir /app WORKDIR /app - ADD ./{MODELNAME} /app/{MODELNAME} + ADD ./{model_name} /app/{model_name} ADD ./requirements.txt /app - + ENV http_proxy={http_proxy} + ENV https_proxy={https_proxy} + ENV HTTP_PROXY={http_proxy} + ENV HTTPS_PROXY={https_proxy} + ENV no_proxy={no_proxy} + ENV NO_PROXY={no_proxy} RUN pip install -r /app/requirements.txt && \ pip install acumos_dcae_model_runner @@ -42,10 +50,10 @@ def _generate_dockerfile(meta, model_name): EXPOSE $DCAEPORT ENTRYPOINT ["acumos_dcae_model_runner"] - CMD ["/app/{MODELNAME}"] - """ - python_version = meta["runtime"]["version"] - return docker_template.format(VERSION=python_version, MODELNAME=model_name) + CMD ["/app/{model_name}"] + ''' + + return docker_template # Public @@ -70,7 +78,8 @@ def build_and_push_docker(config, model_name, model_version="latest"): f.write("{0}=={1}\n".format(r["name"], r["version"])) # generate the dockerfile - dockerfile = _generate_dockerfile(meta, model_name) + print("Http_Proxy: {} & Https_Proxy: {}".format(config.http_proxy, config.https_proxy)) + dockerfile = _generate_dockerfile(meta, model_name, config.http_proxy, config.https_proxy, config.no_proxy) # write the dockerfile, will be removed later with open("{0}/Dockerfile".format(model_repo_path), "w") as f: diff --git a/adapter/acumos/aoconversion/scanner.py b/adapter/acumos/aoconversion/scanner.py index cefcc3d..18dd701 100644 --- a/adapter/acumos/aoconversion/scanner.py +++ b/adapter/acumos/aoconversion/scanner.py @@ -3,6 +3,8 @@ # ============================================================================= # Copyright (c) 2019-2020 AT&T Intellectual Property. All rights reserved. # ============================================================================= +# Copyright (c) 2021 highstreet technologies GmbH. 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 @@ -47,7 +49,7 @@ class Config(object): Configuration parameters as attributes, make sure the required ones are there, populate defaults. """ - def __init__(self, dcaeuser, onboardingurl, onboardinguser, onboardingpass, certfile, dockerregistry, dockeruser, dockerpass, acumosurl=None, interval=900, dockerhost='tcp://localhost:2375', tmpdir='/var/tmp/aoadapter', certverify=True, catalogs=None, port=None, **extras): + def __init__(self, dcaeuser, onboardingurl, onboardinguser, onboardingpass, certfile, dockerregistry, dockeruser, dockerpass, http_proxy, https_proxy, no_proxy, acumosurl=None, interval=900, dockerhost='tcp://localhost:2375', tmpdir='/var/tmp/aoadapter', certverify=True, catalogs=None, port=None, **extras): self.dcaeuser = dcaeuser def x(fmt, *args, **kwargs): @@ -64,6 +66,9 @@ class Config(object): self._dockerpass = dockerpass self.interval = interval self.tmpdir = tmpdir + self.http_proxy = http_proxy if http_proxy is not None else "" + self.https_proxy = https_proxy if http_proxy is not None else "" + self.no_proxy = no_proxy if no_proxy is not None else "" if catalogs is not None and type(catalogs) is not list: catalogs = [catalogs] self.catalogs = catalogs diff --git a/adapter/acumos/pom.xml b/adapter/acumos/pom.xml index eda0620..f0a6be0 100644 --- a/adapter/acumos/pom.xml +++ b/adapter/acumos/pom.xml @@ -5,6 +5,8 @@ org.onap.dcae ================================================================================ Copyright (c) 2019-2020 AT&T Intellectual Property. All rights reserved. ================================================================================ +Copyright (c) 2021 highstreet technologies GmbH. 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 @@ -23,7 +25,7 @@ limitations under the License. 4.0.0 org.onap.dcaegen2.platform.adapter dcaegen2-platform-adapter-acumos - 1.0.4-SNAPSHOT + 1.0.5-SNAPSHOT UTF-8 . diff --git a/adapter/acumos/setup.py b/adapter/acumos/setup.py index d667f0b..1af4a3f 100644 --- a/adapter/acumos/setup.py +++ b/adapter/acumos/setup.py @@ -3,6 +3,8 @@ # ============================================================================= # Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. # ============================================================================= +# Copyright (c) 2021 highstreet technologies GmbH. 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 @@ -20,7 +22,7 @@ from setuptools import setup, find_packages setup( name="aoconversion", - version="1.0.4-SNAPSHOT", + version="1.0.5-SNAPSHOT", packages=find_packages(exclude=["tests.*", "tests"]), author="Tommy Carpenter, Andrew Gauld", author_email="tommy@research.att.com, agauld@att.com", diff --git a/adapter/acumos/tests/test_convert.py b/adapter/acumos/tests/test_convert.py index 780cc55..bb9e73d 100644 --- a/adapter/acumos/tests/test_convert.py +++ b/adapter/acumos/tests/test_convert.py @@ -3,6 +3,8 @@ # ============================================================================= # Copyright (c) 2019-2020 AT&T Intellectual Property. All rights reserved. # ============================================================================= +# Copyright (c) 2021 highstreet technologies GmbH. 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 @@ -27,7 +29,7 @@ from testing_helpers import get_fixture_path def test_gen_dcae_artifacts_for_model(monkeypatch): model_repo_path = get_fixture_path('models') model_name = 'example-model' - config = aoconversion.scanner.Config(dcaeurl='http://dcaeurl', dcaeuser='dcaeuser', onboardingurl='https://onboarding', onboardinguser='obuser', onboardingpass='obpass', acumosurl='https://acumos', certfile=None, dockerregistry='dockerregistry', dockeruser='registryuser', dockerpass='registrypassword', tmpdir=model_repo_path) + config = aoconversion.scanner.Config(dcaeurl='http://dcaeurl', dcaeuser='dcaeuser', onboardingurl='https://onboarding', onboardinguser='obuser', onboardingpass='obpass', acumosurl='https://acumos', certfile=None, dockerregistry='dockerregistry', dockeruser='registryuser', dockerpass='registrypassword', http_proxy='', https_proxy='', no_proxy='', tmpdir=model_repo_path) spec = { "self": { "version": "1.0.0", diff --git a/adapter/acumos/tests/test_docker.py b/adapter/acumos/tests/test_docker.py index 2f618e6..bee53a0 100644 --- a/adapter/acumos/tests/test_docker.py +++ b/adapter/acumos/tests/test_docker.py @@ -3,6 +3,8 @@ # ============================================================================= # Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. # ============================================================================= +# Copyright (c) 2021 highstreet technologies GmbH. 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 @@ -25,7 +27,7 @@ TEST_META = get_json_fixture("models/example-model/metadata.json") def test_generate_dockerfile(): assert ( - docker_gen._generate_dockerfile(TEST_META, "example-model") + docker_gen._generate_dockerfile(TEST_META, "example-model", '', '', '') == """ FROM python:3.6.8 @@ -35,7 +37,12 @@ def test_generate_dockerfile(): ADD ./example-model /app/example-model ADD ./requirements.txt /app - + ENV http_proxy= + ENV https_proxy= + ENV HTTP_PROXY= + ENV HTTPS_PROXY= + ENV no_proxy= + ENV NO_PROXY= RUN pip install -r /app/requirements.txt && \ pip install acumos_dcae_model_runner @@ -50,6 +57,6 @@ def test_generate_dockerfile(): def test_build_and_push_docker(monkeypatch): model_repo_path = get_fixture_path('models') - config = scanner.Config(dcaeurl='http://dcaeurl', dcaeuser='dcaeuser', onboardingurl='https://onboarding', onboardinguser='obuser', onboardingpass='obpass', acumosurl='https://acumos', certfile=None, dockerregistry='dockerregistry', dockeruser='registryuser', dockerpass='registrypassword', tmpdir=model_repo_path) + config = scanner.Config(dcaeurl='http://dcaeurl', dcaeuser='dcaeuser', onboardingurl='https://onboarding', onboardinguser='obuser', onboardingpass='obpass', acumosurl='https://acumos', certfile=None, dockerregistry='dockerregistry', dockeruser='registryuser', dockerpass='registrypassword', http_proxy='', https_proxy='', no_proxy='', tmpdir=model_repo_path) monkeypatch.setattr(docker_gen, 'APIClient', test_fed._mockdocker.APIClient) assert(docker_gen.build_and_push_docker(config, 'example-model', model_version="latest") == 'dockerregistry/example-model:latest') diff --git a/adapter/acumos/tests/test_fed.py b/adapter/acumos/tests/test_fed.py index c5400a3..f56e297 100644 --- a/adapter/acumos/tests/test_fed.py +++ b/adapter/acumos/tests/test_fed.py @@ -3,6 +3,8 @@ # ============================================================================= # Copyright (c) 2019-2020 AT&T Intellectual Property. All rights reserved. # ============================================================================= +# Copyright (c) 2021 highstreet technologies GmbH. 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 @@ -165,7 +167,7 @@ _mockwebdata = { def test_aoconversion(mock_schemas, tmpdir, monkeypatch): - config = aoc_scanner.Config(dcaeurl='http://dcaeurl', dcaeuser='dcaeuser', onboardingurl='https://onboarding', onboardinguser='obuser', onboardingpass='obpass', acumosurl='https://acumos', certfile=None, dockerregistry='dockerregistry', dockeruser='registryuser', dockerpass='registrypassword') + config = aoc_scanner.Config(dcaeurl='http://dcaeurl', dcaeuser='dcaeuser', onboardingurl='https://onboarding', onboardinguser='obuser', onboardingpass='obpass', acumosurl='https://acumos', certfile=None, dockerregistry='dockerregistry', dockeruser='registryuser', dockerpass='registrypassword', http_proxy='', https_proxy='', no_proxy='') monkeypatch.setattr(aoc_docker_gen, 'APIClient', _mockdocker.APIClient) monkeypatch.setattr(requests, 'get', _mockwww(_mockwebdata)) monkeypatch.setattr(requests, 'post', _mockwww(_mockpostdata)) -- cgit 1.2.3-korg