summaryrefslogtreecommitdiffstats
path: root/mod/onboardingapi/dcae_cli/cli.py
diff options
context:
space:
mode:
Diffstat (limited to 'mod/onboardingapi/dcae_cli/cli.py')
-rw-r--r--mod/onboardingapi/dcae_cli/cli.py115
1 files changed, 115 insertions, 0 deletions
diff --git a/mod/onboardingapi/dcae_cli/cli.py b/mod/onboardingapi/dcae_cli/cli.py
new file mode 100644
index 0000000..fc2849b
--- /dev/null
+++ b/mod/onboardingapi/dcae_cli/cli.py
@@ -0,0 +1,115 @@
+# ============LICENSE_START=======================================================
+# 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.
+
+# -*- coding: utf-8 -*-
+"""
+Provides entry-level logic for building the CLI. Commands and heavy-lifting logic should be in their own module.
+"""
+import click
+
+from dcae_cli import util
+from dcae_cli.commands.catalog import catalog
+from dcae_cli.commands.component import component
+from dcae_cli.commands.data_format import data_format
+from dcae_cli.commands.profiles import profiles
+from dcae_cli.catalog import get_catalog
+from dcae_cli.util.exc import DcaeException
+from dcae_cli.util.logger import get_logger
+from dcae_cli.util import config as conf
+from dcae_cli.util import profiles as prof
+
+
+log = get_logger('cli')
+
+
+def _reinit_cli():
+ """Reinit cli"""
+ click.echo("Warning! Reinitializing your dcae-cli configuration")
+ try:
+ conf.reinit_config()
+ prof.reinit_profiles()
+ except Exception as e:
+ raise DcaeException("Failed to reinitialize configuration: {0}".format(e))
+
+def _reinit_callback(ctx, param, value):
+ """Callback used for the eager --reinit option"""
+ if not value or ctx.resilient_parsing:
+ return
+ _reinit_cli()
+ click.echo("Reinitialize done")
+ ctx.exit()
+
+
+
+@click.group()
+@click.option('--verbose', '-v', is_flag=True, default=False, help='Prints INFO-level logs to screen.')
+# This is following the same pattern as --version
+# http://click.pocoo.org/5/options/#callbacks-and-eager-options
+@click.option('--reinit', is_flag=True, callback=_reinit_callback, expose_value=False,
+ is_eager=True, help='Re-initialize dcae-cli configuration')
+@click.version_option()
+@click.pass_context
+def cli(ctx, verbose):
+
+ if ctx.obj is None:
+ ctx.obj = dict()
+
+ if 'config' not in ctx.obj:
+ config = conf.get_config()
+
+ if conf.should_force_reinit(config):
+ if click.confirm("You must reinitialize your dcae-cli configuration. Reinitialize now?",
+ abort=True):
+ _reinit_cli()
+
+ ctx.obj['config'] = config
+ else:
+ config = ctx.obj['config']
+
+ if 'catalog' not in ctx.obj:
+ try:
+ ctx.obj['catalog'] = get_catalog(**config)
+ except Exception as e:
+ log.error(e)
+ raise DcaeException("Having issues connecting to the onboarding catalog")
+
+ if verbose:
+ util.logger.set_verbose()
+
+
+@cli.command(name="http", help="Run HTTP API")
+@click.option('--live', is_flag=True, default=False, help='Starts up the HTTP API in live mode which means it binds to 80')
+@click.pass_context
+def run_http_api(ctx, live):
+ catalog = ctx.obj['catalog']
+ should_debug = not live
+ # Importing http module has to be here otherwise unit tests will break
+ # because http module makes config calls when the module is loaded (global).
+ # Config calls must always be done lazily as much as possible in order for the
+ # mock_cli_config pytest.fixture to kick in.
+ from dcae_cli import http
+ http.start_http_server(catalog, debug=should_debug)
+
+
+
+cli.add_command(catalog)
+cli.add_command(component)
+cli.add_command(data_format)
+cli.add_command(profiles)