From 9e3f8baaba48f7e08006ee05a3e6339337d07a52 Mon Sep 17 00:00:00 2001 From: 00129207 Date: Wed, 5 Jul 2017 17:28:41 +0800 Subject: [PATCH] Support api micro version in OSC Change-Id: I2c3168592d5d8ad8b97310ba32195ee580903ac7 Closes-Bug: #1701939 --- zunclient/osc/plugin.py | 24 ++++++++++++++++++++++-- zunclient/tests/unit/osc/test_plugin.py | 3 ++- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/zunclient/osc/plugin.py b/zunclient/osc/plugin.py index bf1c6a7c..43ebb4de 100644 --- a/zunclient/osc/plugin.py +++ b/zunclient/osc/plugin.py @@ -10,18 +10,22 @@ # License for the specific language governing permissions and limitations # under the License. +import argparse import logging from osc_lib import utils LOG = logging.getLogger(__name__) -DEFAULT_CONTAINER_API_VERSION = "1" +DEFAULT_CONTAINER_API_VERSION = "1.1" API_VERSION_OPTION = "os_container_api_version" API_NAME = "container" +LAST_KNOWN_API_VERSION = 1 API_VERSIONS = { - '1': 'zunclient.v1.client.Client', + '1.%d' % i: 'zunclient.v1.client.Client' + for i in range(1, LAST_KNOWN_API_VERSION + 1) } +API_VERSIONS['1'] = API_VERSIONS[DEFAULT_CONTAINER_API_VERSION] def make_client(instance): @@ -34,6 +38,7 @@ def make_client(instance): zun_client)) client = zun_client( + os_container_api_version=instance._api_version[API_NAME], region_name=instance._region_name, session=instance.session, service_type='container', @@ -49,7 +54,22 @@ def build_option_parser(parser): default=utils.env( 'OS_CONTAINER_API_VERSION', default=DEFAULT_CONTAINER_API_VERSION), + action=ReplaceLatestVersion, + choices=sorted( + API_VERSIONS, + key=lambda k: [int(x) for x in k.split('.')]) + ['latest'], help=("Container API version, default={0}" "(Env:OS_CONTAINER_API_VERSION)").format( DEFAULT_CONTAINER_API_VERSION)) return parser + + +class ReplaceLatestVersion(argparse.Action): + """Replaces `latest` keyword by last known version.""" + def __call__(self, parser, namespace, values, option_string=None): + latest = values == 'latest' + if latest: + values = '1.%d' % LAST_KNOWN_API_VERSION + LOG.debug("Replacing 'latest' API version with the " + "latest known version '%s'", values) + setattr(namespace, self.dest, values) diff --git a/zunclient/tests/unit/osc/test_plugin.py b/zunclient/tests/unit/osc/test_plugin.py index d9305893..4da83d53 100644 --- a/zunclient/tests/unit/osc/test_plugin.py +++ b/zunclient/tests/unit/osc/test_plugin.py @@ -27,6 +27,7 @@ class TestContainerPlugin(base.TestCase): instance.session = 'zun_session' plugin.make_client(instance) - p_client.assert_called_with(region_name='zun_region', + p_client.assert_called_with(os_container_api_version='1', + region_name='zun_region', session='zun_session', service_type='container')