Abstract Freezerclient Object creation

* Use API v2 by default if OS_BACKUP_API_VERSION env var not provided

Change-Id: I2e752f702cbe8221c4312962a9be53b90766c9d8
This commit is contained in:
Saad Zaher
2018-02-16 12:15:40 +00:00
parent 8ca9809420
commit 6a83ec9131
3 changed files with 44 additions and 23 deletions

View File

@@ -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:]):

View File

@@ -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)

View File

@@ -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