diff --git a/freezerclient/shell.py b/freezerclient/shell.py index d34f293..2637708 100644 --- a/freezerclient/shell.py +++ b/freezerclient/shell.py @@ -20,33 +20,16 @@ from cliff import app from cliff import commandmanager import freezerclient -from freezerclient.v1 import client as v1_client -from freezerclient.v2 import client as v2_client - +from freezerclient import utils log = logging.getLogger(__name__) # Suppress output from requests logging.getLogger('requests').setLevel(logging.WARN) -def check_api_version(): - """Check freezer version API to use - 1: not multi-tenant, useful for infrastructure - 2: multi-tenant, useful for backup as a service - :return: str - """ - freezer_api_version = os.environ.get('OS_BACKUP_API_VERSION', '1') - if freezer_api_version == '1': - return '1' - elif freezer_api_version == '2': - return '2' - else: - raise Exception('Freezer API version not supported') - - class FreezerCommandManager(commandmanager.CommandManager): """All commands available for the shell are registered here""" - if check_api_version() == '1': + if utils.check_api_version() == '1': from freezerclient.v1 import actions from freezerclient.v1 import backups from freezerclient.v1 import clients @@ -281,10 +264,7 @@ class FreezerShell(app.App): 'cacert': self.options.os_cacert, 'insecure': self.options.insecure } - if check_api_version() == '1': - return v1_client.Client(**opts) - else: - return v2_client.Client(**opts) + return utils.get_client_instance(opts) def main(argv=sys.argv[1:]): diff --git a/freezerclient/utils.py b/freezerclient/utils.py index c976925..87cbe10 100644 --- a/freezerclient/utils.py +++ b/freezerclient/utils.py @@ -15,6 +15,9 @@ import json import logging +import os + +from oslo_utils import importutils logging = logging.getLogger(__name__) @@ -138,3 +141,40 @@ def prepare_search(search_term): if search_term: return {"match": [{"_all": search_term}, ], } return {} + + +def check_api_version(): + """Check freezer version API to use + 1: not multi-tenant, useful for infrastructure + 2: multi-tenant, useful for backup as a service + :return: str + """ + freezer_api_version = os.environ.get('OS_BACKUP_API_VERSION', '2') + if freezer_api_version == '1': + return '1' + elif freezer_api_version == '2': + return '2' + else: + raise Exception('Freezer API version not supported') + + +def get_client_class(api_version=None): + """Return Client Class. + Try to use provided api_version to import client class or + Guess the api_version form env. + Returns freezerclient.v{x}.client.Client + :return: class + """ + if not api_version: + api_version = check_api_version() + api_string = 'freezerclient.v{0}.client.Client'.format(api_version) + return importutils.import_class(api_string) + + +def get_client_instance(kwargs={}, opts=None): + """Get Freezerclient Instance. + We will the provided auth dict to instantiate a client instance + Returns freezerclient.v{x}.client.Client Object + :return: Object + """ + return get_client_class()(opts=opts, **kwargs) diff --git a/requirements.txt b/requirements.txt index 5999291..34fe663 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,3 +5,4 @@ setuptools!=24.0.0,!=34.0.0,!=34.0.1,!=34.0.2,!=34.0.3,!=34.1.0,!=34.1.1,!=34.2. pbr!=2.1.0,>=2.0.0 # Apache-2.0 keystoneauth1>=3.3.0 # Apache-2.0 cliff!=2.9.0,>=2.8.0 # Apache-2.0 +oslo.utils>=3.33.0 # Apache-2.0