diff --git a/requirements.txt b/requirements.txt index 2d0d0e51..5cea7cd8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,6 +3,7 @@ # process, which may cause wedges in the gate later. pbr>=1.6 # Apache-2.0 +PrettyTable>=0.7.1,<0.8 # BSD +osc-lib>=1.2.0 # Apache-2.0 oslo.i18n>=2.1.0 # Apache-2.0 oslo.utils>=3.16.0 # Apache-2.0 -PrettyTable>=0.7.1,<0.8 # BSD diff --git a/setup.cfg b/setup.cfg index 22beaae1..59ab40f2 100644 --- a/setup.cfg +++ b/setup.cfg @@ -28,6 +28,9 @@ packages = console_scripts = zun = zunclient.shell:main +openstack.cli.extension = + container = zunclient.osc.plugin + [build_sphinx] source-dir = doc/source build-dir = doc/build diff --git a/zunclient/osc/__init__.py b/zunclient/osc/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/zunclient/osc/plugin.py b/zunclient/osc/plugin.py new file mode 100644 index 00000000..d9582dba --- /dev/null +++ b/zunclient/osc/plugin.py @@ -0,0 +1,55 @@ +# 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. + +import logging + +from osc_lib import utils + +LOG = logging.getLogger(__name__) + +DEFAULT_CONTAINER_API_VERSION = "1" +API_VERSION_OPTION = "os_container_api_version" +API_NAME = "container" +API_VERSIONS = { + '1': 'zunclient.v1.client.Client', +} + + +def make_client(instance): + """Returns a zun service client""" + zun_client = utils.get_client_class( + API_NAME, + instance._api_version[API_NAME], + API_VERSIONS) + LOG.debug("Instantiating zun client: {0}".format( + zun_client)) + + client = zun_client( + region_name=instance._region_name, + session=instance.session, + service_type='container', + ) + return client + + +def build_option_parser(parser): + """Hook to add global options""" + parser.add_argument( + '--os-container-api-version', + metavar='', + default=utils.env( + 'OS_CONTAINER_API_VERSION', + default=DEFAULT_CONTAINER_API_VERSION), + help=_("Container API version, default={0}" + "(Env:OS_CONTAINER_API_VERSION)").format( + DEFAULT_CONTAINER_API_VERSION)) + return parser diff --git a/zunclient/tests/unit/osc/__init__.py b/zunclient/tests/unit/osc/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/zunclient/tests/unit/osc/test_plugin.py b/zunclient/tests/unit/osc/test_plugin.py new file mode 100644 index 00000000..9a90ca57 --- /dev/null +++ b/zunclient/tests/unit/osc/test_plugin.py @@ -0,0 +1,32 @@ +# 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. + +import mock + +from zunclient.osc import plugin +from zunclient.tests import base + + +class TestContainerPlugin(base.TestCase): + + @mock.patch("zunclient.v1.client.Client") + def test_make_client(self, p_client): + + instance = mock.Mock() + instance._api_version = {"container": '1'} + instance._region_name = 'zun_region' + instance.session = 'zun_session' + + plugin.make_client(instance) + p_client.assert_called_with(region_name='zun_region', + session='zun_session', + service_type='container')