975bcc4a98
* correct log levels * correct log messages partial-bug: 1419872 partial-implements-bp: unified-style-logging Change-Id: I80c2b4c809dc52125f9f4a3beec0cd3b6c4c1213
175 lines
5.7 KiB
Python
175 lines
5.7 KiB
Python
# Copyright (c) 2014 Mirantis, Inc.
|
|
#
|
|
# 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.
|
|
|
|
"""
|
|
*** Deprecation warning ***
|
|
This file is about to be deprecated, please use python-muranoclient.
|
|
*** Deprecation warning ***
|
|
"""
|
|
|
|
import sys
|
|
import traceback
|
|
|
|
from oslo_config import cfg
|
|
from oslo_db import exception as db_exception
|
|
from oslo_log import log as logging
|
|
|
|
from murano.common import consts
|
|
from murano.db.catalog import api as db_catalog_api
|
|
from murano.common.i18n import _LI, _LE
|
|
from murano.packages import load_utils
|
|
from murano import version
|
|
|
|
CONF = cfg.CONF
|
|
LOG = logging.getLogger(__name__)
|
|
|
|
|
|
class AdminContext(object):
|
|
def __init__(self):
|
|
self.is_admin = True
|
|
|
|
|
|
def _do_import_package(_dir, categories, update=False):
|
|
LOG.debug("Going to import Murano package from {source}".format(
|
|
source=_dir))
|
|
pkg = load_utils.load_from_dir(_dir)
|
|
|
|
LOG.debug("Checking for existing packages")
|
|
existing = db_catalog_api.package_search(
|
|
{'fqn': pkg.full_name},
|
|
AdminContext())
|
|
if existing:
|
|
existing_pkg = existing[0]
|
|
if update:
|
|
LOG.debug('Deleting existing package {exst_pkg_id}').format(
|
|
exst_pkg_id=existing_pkg.id)
|
|
db_catalog_api.package_delete(existing_pkg.id, AdminContext())
|
|
else:
|
|
LOG.error(_LE("Package '{name}' exists ({pkg_id}). Use --update.")
|
|
.format(name=pkg.full_name, pkg_id=existing_pkg.id))
|
|
return
|
|
|
|
package = {
|
|
'fully_qualified_name': pkg.full_name,
|
|
'type': pkg.package_type,
|
|
'author': pkg.author,
|
|
'supplier': pkg.supplier,
|
|
'name': pkg.display_name,
|
|
'description': pkg.description,
|
|
# note: we explicitly mark all the imported packages as public,
|
|
# until a parameter added to control visibility scope of a package
|
|
'is_public': True,
|
|
'tags': pkg.tags,
|
|
'logo': pkg.logo,
|
|
'supplier_logo': pkg.supplier_logo,
|
|
'ui_definition': pkg.ui,
|
|
'class_definitions': pkg.classes,
|
|
'archive': pkg.blob,
|
|
'categories': categories or []
|
|
}
|
|
|
|
# note(ruhe): the second parameter is tenant_id
|
|
# it is a required field in the DB, that's why we pass an empty string
|
|
result = db_catalog_api.package_upload(package, '')
|
|
|
|
LOG.info(_LI("Finished import of package {res_id}").format(
|
|
res_id=result.id))
|
|
|
|
|
|
# TODO(ruhe): proper error handling
|
|
def do_import_package():
|
|
"""Import Murano package from local directory."""
|
|
_do_import_package(
|
|
CONF.command.directory,
|
|
CONF.command.categories,
|
|
CONF.command.update)
|
|
|
|
|
|
def do_list_categories():
|
|
categories = db_catalog_api.category_get_names()
|
|
|
|
if categories:
|
|
print(">> Murano package categories:")
|
|
for c in categories:
|
|
print("* {0}".format(c))
|
|
else:
|
|
print("No categories were found")
|
|
|
|
|
|
def do_add_category():
|
|
category_name = CONF.command.category_name
|
|
|
|
try:
|
|
db_catalog_api.category_add(category_name)
|
|
print(">> Successfully added category {0}".format(category_name))
|
|
except db_exception.DBDuplicateEntry:
|
|
print(">> ERROR: Category '{0}' already exists".format(category_name))
|
|
|
|
|
|
def add_command_parsers(subparsers):
|
|
parser = subparsers.add_parser('import-package')
|
|
parser.set_defaults(func=do_import_package)
|
|
parser.add_argument('directory',
|
|
help='A directory with Murano package.')
|
|
parser.add_argument('-u', '--update',
|
|
action="store_true",
|
|
default=False,
|
|
help='If a package already exists, delete and update')
|
|
parser.add_argument('-c', '--categories',
|
|
choices=consts.CATEGORIES,
|
|
nargs='*',
|
|
help='An optional list of categories this package '
|
|
'to be assigned to.')
|
|
|
|
parser = subparsers.add_parser('category-list')
|
|
parser.set_defaults(func=do_list_categories)
|
|
|
|
parser = subparsers.add_parser('category-add')
|
|
parser.set_defaults(func=do_add_category)
|
|
parser.add_argument('category_name',
|
|
help='Name of the new category.')
|
|
|
|
|
|
command_opt = cfg.SubCommandOpt('command',
|
|
title='Commands',
|
|
help='Show available commands.',
|
|
handler=add_command_parsers)
|
|
|
|
|
|
def main():
|
|
CONF.register_cli_opt(command_opt)
|
|
|
|
try:
|
|
default_config_files = cfg.find_config_files('murano', 'murano')
|
|
CONF(sys.argv[1:], project='murano', prog='murano-manage',
|
|
version=version.version_string,
|
|
default_config_files=default_config_files)
|
|
except RuntimeError as e:
|
|
LOG.error(_LE("failed to initialize murano-manage: {error}").format(
|
|
error=e))
|
|
sys.exit("ERROR: %s" % e)
|
|
|
|
try:
|
|
CONF.command.func()
|
|
except Exception as e:
|
|
tb = traceback.format_exc()
|
|
err_msg = _LE("murano-manage command failed: {error}\n"
|
|
"{traceback}").format(error=e, traceback=tb)
|
|
LOG.error(err_msg)
|
|
sys.exit(err_msg)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|