diff --git a/senlinclient/common/sdk.py b/senlinclient/common/sdk.py index 6f1a7c24..ceccae77 100644 --- a/senlinclient/common/sdk.py +++ b/senlinclient/common/sdk.py @@ -27,7 +27,7 @@ def create_connection(prof=None, user_agent=None, **kwargs): if region_name: prof.set_region('clustering', region_name) - prof.set_api_version('clustering', '1.2') + prof.set_api_version('clustering', '1.5') try: conn = connection.Connection(profile=prof, user_agent=user_agent, **kwargs) diff --git a/senlinclient/common/utils.py b/senlinclient/common/utils.py index c49ea961..fbbae17a 100644 --- a/senlinclient/common/utils.py +++ b/senlinclient/common/utils.py @@ -144,9 +144,9 @@ def _print_list(objs, fields, formatters=None, sortby_index=0, pt.add_row(row) if six.PY3: - print(encodeutils.safe_encode(pt.get_string(**kwargs)).decode()) + return encodeutils.safe_encode(pt.get_string(**kwargs)).decode() else: - print(encodeutils.safe_encode(pt.get_string(**kwargs))) + return encodeutils.safe_encode(pt.get_string(**kwargs)) def print_list(objs, fields, formatters=None, sortby_index=0, @@ -157,10 +157,11 @@ def print_list(objs, fields, formatters=None, sortby_index=0, objs = [] try: - _print_list(objs, fields, formatters=formatters, - sortby_index=sortby_index, - mixed_case_fields=mixed_case_fields, - field_labels=field_labels) + res = _print_list(objs, fields, formatters=formatters, + sortby_index=sortby_index, + mixed_case_fields=mixed_case_fields, + field_labels=field_labels) + print(res) except Exception as ex: exc.parse_exception(ex) diff --git a/senlinclient/plugin.py b/senlinclient/plugin.py index 925a19c8..4741703e 100644 --- a/senlinclient/plugin.py +++ b/senlinclient/plugin.py @@ -23,7 +23,7 @@ LOG = logging.getLogger(__name__) DEFAULT_CLUSTERING_API_VERSION = '1' API_VERSION_OPTION = 'os_clustering_api_version' API_NAME = 'clustering' -CURRENT_API_VERSION = '1.2' +CURRENT_API_VERSION = '1.5' def make_client(instance): diff --git a/senlinclient/tests/unit/v1/test_profile_type.py b/senlinclient/tests/unit/v1/test_profile_type.py index 66e8d12d..36adcd76 100644 --- a/senlinclient/tests/unit/v1/test_profile_type.py +++ b/senlinclient/tests/unit/v1/test_profile_type.py @@ -27,16 +27,24 @@ class TestProfileType(fakes.TestClusteringv1): class TestProfileTypeList(TestProfileType): - expected_columns = ['name'] + expected_columns = ['name', 'version', 'support_status'] list_response = [ - sdk_profile_type.ProfileType(name='BBB', schema={'foo': 'bar'}), - sdk_profile_type.ProfileType(name='AAA', schema={'foo': 'bar'}), - sdk_profile_type.ProfileType(name='CCC', schema={'foo': 'bar'}), + sdk_profile_type.ProfileType( + name='BBB', schema={'foo': 'bar'}, + support_status={ + "1.0": [{"status": "SUPPORTED", "since": "2016.10"}] + } + ), + sdk_profile_type.ProfileType( + name='AAA', schema={'foo': 'bar'}, + support_status={ + "1.0": [{"status": "DEPRECATED", "since": "2016.01"}] + } + ), ] expected_rows = [ - ['AAA'], - ['BBB'], - ['CCC'] + ('AAA', '1.0', 'DEPRECATED since 2016.01'), + ('BBB', '1.0', 'SUPPORTED since 2016.10') ] def setUp(self): diff --git a/senlinclient/tests/unit/v1/test_shell.py b/senlinclient/tests/unit/v1/test_shell.py index 376a3be1..a730f62b 100644 --- a/senlinclient/tests/unit/v1/test_shell.py +++ b/senlinclient/tests/unit/v1/test_shell.py @@ -76,10 +76,24 @@ class ShellTest(testtools.TestCase): @mock.patch.object(utils, 'print_list') def test_do_profile_type_list(self, mock_print): service = mock.Mock() - types = mock.Mock() + mock_type = mock.Mock( + support_status={ + "1.0": [ + { + "status": "SUPPORTED", + "since": "2016.10" + } + ] + } + ) + mock_type.name = "fake_type" + types = [mock_type] service.profile_types.return_value = types sh.do_profile_type_list(service) - mock_print.assert_called_once_with(types, ['name'], sortby_index=0) + mock_print.assert_called_once_with( + mock.ANY, + ['name', 'version', 'support_status'], + sortby_index=0) self.assertTrue(service.profile_types.called) @mock.patch.object(utils, 'format_output') diff --git a/senlinclient/v1/profile_type.py b/senlinclient/v1/profile_type.py index 43983401..8cd454c0 100644 --- a/senlinclient/v1/profile_type.py +++ b/senlinclient/v1/profile_type.py @@ -17,6 +17,7 @@ import logging from openstack import exceptions as sdk_exc from osc_lib.command import command from osc_lib import exceptions as exc + from senlinclient.common import format_utils from senlinclient.common.i18n import _ @@ -34,9 +35,19 @@ class ProfileTypeList(command.Lister): self.log.debug("take_action(%s)", parsed_args) senlin_client = self.app.client_manager.clustering types = senlin_client.profile_types() - columns = ['name'] - rows = sorted([t.name] for t in types) - return columns, rows + columns = ['name', 'version', 'support_status'] + + results = [] + for t in types: + for v in t.support_status.keys(): + st_list = '\n'.join([ + ' since '.join((item['status'], item['since'])) + for item in t.support_status[v] + ]) + + results.append((t.name, v, st_list)) + + return columns, sorted(results) class ProfileTypeShow(format_utils.YamlFormat): diff --git a/senlinclient/v1/shell.py b/senlinclient/v1/shell.py index 59498324..8645c1a2 100644 --- a/senlinclient/v1/shell.py +++ b/senlinclient/v1/shell.py @@ -48,13 +48,28 @@ def do_build_info(service, args=None): # PROFILE TYPES - def do_profile_type_list(service, args=None): """List the available profile types.""" show_deprecated('senlin profile-type-list', 'openstack cluster profile type list') + + class _ProfileType(object): + + def __init__(self, name, version, status): + self.name = name + self.version = version + self.support_status = status + + fields = ['name', 'version', 'support_status'] types = service.profile_types() - utils.print_list(types, ['name'], sortby_index=0) + results = [] + for t in types: + for v in t.support_status.keys(): + ss = '\n'.join([' since '.join((item['status'], item['since'])) + for item in t.support_status[v]]) + results.append(_ProfileType(t.name, v, ss)) + + utils.print_list(results, fields, sortby_index=0) @utils.arg('type_name', metavar='',