From 4188380fb7b806640103f557afec344455787a34 Mon Sep 17 00:00:00 2001 From: Michael Hwang Date: Fri, 15 Sep 2017 13:41:58 -0400 Subject: Make server url into a user inputted config param Change-Id: I90e94445fe0f3c003307355cade493e97d0a202d Issue-Id: DCAEGEN2-110 Signed-off-by: Michael Hwang --- dcae-cli/dcae_cli/util/__init__.py | 10 ++++------ dcae-cli/dcae_cli/util/config.py | 13 ++++++++++++- dcae-cli/dcae_cli/util/discovery.py | 2 +- dcae-cli/dcae_cli/util/profiles.py | 3 ++- dcae-cli/dcae_cli/util/tests/test_config.py | 21 ++++++++++++--------- dcae-cli/dcae_cli/util/tests/test_discovery.py | 15 --------------- dcae-cli/dcae_cli/util/tests/test_profiles.py | 10 +++++----- 7 files changed, 36 insertions(+), 38 deletions(-) (limited to 'dcae-cli/dcae_cli/util') diff --git a/dcae-cli/dcae_cli/util/__init__.py b/dcae-cli/dcae_cli/util/__init__.py index e91c573..b39de74 100644 --- a/dcae-cli/dcae_cli/util/__init__.py +++ b/dcae-cli/dcae_cli/util/__init__.py @@ -106,15 +106,13 @@ def load_json(path): raise DcaeException("File '{}' appears to be a malformed JSON.".format(path)) -def fetch_file_from_nexus(path, transform_func=json.loads): - """Fetch file from nexus +def fetch_file_from_web(server_url, path, transform_func=json.loads): + """Fetch file from a web server The default behavior is to transform the response to a json. """ - # TODO: Source this from app's configuration [ONAP URL TBD] - server_uri = "https://make-me-valid" - nexus_url = "{0}/{1}".format(server_uri, path) - r = requests.get(nexus_url) + artifact_url = "{0}/{1}".format(server_url, path) + r = requests.get(artifact_url) r.raise_for_status() if transform_func: return transform_func(r.text) diff --git a/dcae-cli/dcae_cli/util/config.py b/dcae-cli/dcae_cli/util/config.py index 4628681..6a53de4 100644 --- a/dcae-cli/dcae_cli/util/config.py +++ b/dcae-cli/dcae_cli/util/config.py @@ -50,12 +50,16 @@ def _init_config_user(): else: click.echo("Invalid user id. Please try again.") +def _init_config_server_url(): + return click.prompt('Please enter the remote server url', type=str).strip() def _init_config(): '''Returns an initial dict for populating the config''' # Grab the remote config and merge it in try: - new_config = util.fetch_file_from_nexus("/dcae-cli/config.json") + server_url = _init_config_server_url() + new_config = util.fetch_file_from_web(server_url, "/dcae-cli/config.json") + new_config["server_url"] = server_url except: # REVIEW: Should we allow users to manually setup their config if not # able to pull from remote server? @@ -82,6 +86,13 @@ def get_config(): '''Returns the configuration dictionary''' return get_pref(get_config_path(), _init_config) +def get_server_url(): + """Returns the remote server url + + The remote server holds the artifacts that the dcae-cli requires like the + seed config json and seed profiles json, and json schemas. + """ + return get_config().get("server_url") # These functions are used to fetch the configurable path to the various json # schema files used in validation. diff --git a/dcae-cli/dcae_cli/util/discovery.py b/dcae-cli/dcae_cli/util/discovery.py index a75165e..0c12f95 100644 --- a/dcae-cli/dcae_cli/util/discovery.py +++ b/dcae-cli/dcae_cli/util/discovery.py @@ -202,7 +202,7 @@ def _make_instances_map(instances): """ mapping = defaultdict(set) for instance in instances: - match = _inst_re.match(instance_target) + match = _inst_re.match(instance) if match is None: continue diff --git a/dcae-cli/dcae_cli/util/profiles.py b/dcae-cli/dcae_cli/util/profiles.py index 7accf24..83a7ca9 100644 --- a/dcae-cli/dcae_cli/util/profiles.py +++ b/dcae-cli/dcae_cli/util/profiles.py @@ -95,7 +95,8 @@ def reinit_profiles(): """ # Grab the remote profiles and merge it in try: - new_profiles = util.fetch_file_from_nexus("/dcae-cli/profiles.json") + server_url = config.get_server_url() + new_profiles = util.fetch_file_from_web(server_url, "/dcae-cli/profiles.json") except: # REVIEW: Should we allow users to manually setup their config if not # able to pull from remote server? diff --git a/dcae-cli/dcae_cli/util/tests/test_config.py b/dcae-cli/dcae_cli/util/tests/test_config.py index 97be773..82f0679 100644 --- a/dcae-cli/dcae_cli/util/tests/test_config.py +++ b/dcae-cli/dcae_cli/util/tests/test_config.py @@ -59,31 +59,34 @@ def test_init_config_user(monkeypatch): def test_init_config(monkeypatch): monkeypatch.setattr(config, '_init_config_user', lambda: "bigmama") - monkeypatch.setattr(dcae_cli.util, 'fetch_file_from_nexus', - lambda path: { "db_url": "conn" }) + monkeypatch.setattr(config, '_init_config_server_url', + lambda: "http://some-nexus-in-the-sky.com") + monkeypatch.setattr(dcae_cli.util, 'fetch_file_from_web', + lambda server_url, path: { "db_url": "conn" }) monkeypatch.setattr("dcae_cli._version.__version__", "2.X.X") - expected = {'cli_version': '2.X.X', 'user': 'bigmama', 'db_url': 'conn'} + expected = {'cli_version': '2.X.X', 'user': 'bigmama', 'db_url': 'conn', + 'server_url': 'http://some-nexus-in-the-sky.com'} assert expected == config._init_config() # Test using of db fallback - monkeypatch.setattr(dcae_cli.util, 'fetch_file_from_nexus', - lambda path: { "db_url": "" }) + monkeypatch.setattr(dcae_cli.util, 'fetch_file_from_web', + lambda server_url, path: { "db_url": "" }) assert "sqlite" in config._init_config()["db_url"] - monkeypatch.setattr(dcae_cli.util, 'fetch_file_from_nexus', - lambda path: {}) + monkeypatch.setattr(dcae_cli.util, 'fetch_file_from_web', + lambda server_url, path: {}) assert "sqlite" in config._init_config()["db_url"] # Simulate error trying to fetch - def fetch_simulate_error(path): + def fetch_simulate_error(server_url, path): raise RuntimeError("Simulated error") - monkeypatch.setattr(dcae_cli.util, 'fetch_file_from_nexus', + monkeypatch.setattr(dcae_cli.util, 'fetch_file_from_web', fetch_simulate_error) with pytest.raises(config.ConfigurationInitError): diff --git a/dcae-cli/dcae_cli/util/tests/test_discovery.py b/dcae-cli/dcae_cli/util/tests/test_discovery.py index aed5ca8..0832c5e 100644 --- a/dcae-cli/dcae_cli/util/tests/test_discovery.py +++ b/dcae-cli/dcae_cli/util/tests/test_discovery.py @@ -373,21 +373,6 @@ def test_make_instance_map(): instances_map = dis._make_instances_map(instances_latest_format) assert instances_map.get(("sandbox.platform.laika", "0.5.0")) == set(instances_latest_format) - instances_other_format = ["mike.39f809be-7d13-4799-b8d0-ba0d5358282b.0-5-0.sandbox-platform-laika.rework-central.dcae.com"] - - instances_map = dis._make_instances_map(instances_other_format) - assert instances_map.get(("sandbox.platform.laika", "0.5.0")) == set(instances_other_format) - - instances_other_format = ["mike.b5435a8c-ef56-4371-94d8-560a61f7352f.0-5-0.sandbox-platform-laika.solutioning-central.dcae.com"] - - instances_map = dis._make_instances_map(instances_other_format) - assert instances_map.get(("sandbox.platform.laika", "0.5.0")) == set(instances_other_format) - - instances_other_format = ["mike.b5435a8c-ef56-4371-94d8-560a61f7352f.0-5-0.sandbox-platform-laika.dcae.com"] - - instances_map = dis._make_instances_map(instances_other_format) - assert instances_map.get(("sandbox.platform.laika", "0.5.0")) == set(instances_other_format) - def test_get_component_instances(monkeypatch): instances = [ diff --git a/dcae-cli/dcae_cli/util/tests/test_profiles.py b/dcae-cli/dcae_cli/util/tests/test_profiles.py index 2d809f5..b15d9b5 100644 --- a/dcae-cli/dcae_cli/util/tests/test_profiles.py +++ b/dcae-cli/dcae_cli/util/tests/test_profiles.py @@ -122,10 +122,10 @@ def test_reinit_profiles(monkeypatch, tmpdir): "consul_host": "realsolcnsl00.dcae.solutioning.com", "docker_host": "realsoldokr00.dcae.solutioning.com:2376" }} - def fetch_profile(target_profile, path): + def fetch_profile(target_profile, server_url, path): return target_profile - monkeypatch.setattr(util, "fetch_file_from_nexus", partial(fetch_profile, + monkeypatch.setattr(util, "fetch_file_from_web", partial(fetch_profile, profile_dict)) profiles.reinit_profiles() assert profiles.get_profiles(include_active=False) == profile_dict @@ -137,7 +137,7 @@ def test_reinit_profiles(monkeypatch, tmpdir): "consul_host": "realsolcnsl00.dcae.solutioning.com", "docker_host": "realsoldokr00.dcae.solutioning.com:2376" }} - monkeypatch.setattr(util, "fetch_file_from_nexus", partial(fetch_profile, + monkeypatch.setattr(util, "fetch_file_from_web", partial(fetch_profile, profile_dict)) profiles.reinit_profiles() all_profiles = profiles.get_profiles(include_active=False) @@ -146,10 +146,10 @@ def test_reinit_profiles(monkeypatch, tmpdir): # Test fetch failure - def fetch_failure(path): + def fetch_failure(server_url, path): raise RuntimeError("Mysterious error") - monkeypatch.setattr(util, "fetch_file_from_nexus", fetch_failure) + monkeypatch.setattr(util, "fetch_file_from_web", fetch_failure) with pytest.raises(profiles.ProfilesInitError): profiles.reinit_profiles() -- cgit 1.2.3-korg