diff --git a/senlinclient/osc/v1/profile_type.py b/senlinclient/osc/v1/profile_type.py new file mode 100644 index 00000000..edf2bc88 --- /dev/null +++ b/senlinclient/osc/v1/profile_type.py @@ -0,0 +1,35 @@ +# 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. + +"""Clustering v1 profile type action implementations""" + +import logging + +from cliff import lister + + +class ProfileTypeList(lister.Lister): + """List the available profile types.""" + + log = logging.getLogger(__name__ + ".ProfileTypeList") + + def get_parser(self, prog_name): + parser = super(ProfileTypeList, self).get_parser(prog_name) + return parser + + def take_action(self, parsed_args): + 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 diff --git a/senlinclient/tests/unit/osc/v1/test_profile_type.py b/senlinclient/tests/unit/osc/v1/test_profile_type.py new file mode 100644 index 00000000..f843ba1d --- /dev/null +++ b/senlinclient/tests/unit/osc/v1/test_profile_type.py @@ -0,0 +1,62 @@ +# 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 openstack.cluster.v1 import profile_type as sdk_profile_type + +from senlinclient.osc.v1 import profile_type as osc_profile_type +from senlinclient.tests.unit.osc.v1 import fakes + + +class TestProfileType(fakes.TestClusteringv1): + def setUp(self): + super(TestProfileType, self).setUp() + self.mock_client = self.app.client_manager.clustering + + +class TestProfileTypeList(TestProfileType): + expected_columns = ['name'] + 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'}} + ), + ] + expected_rows = [ + ['AAA'], + ['BBB'], + ['CCC'] + ] + + def setUp(self): + super(TestProfileTypeList, self).setUp() + self.cmd = osc_profile_type.ProfileTypeList(self.app, None) + self.mock_client.profile_types = mock.Mock( + return_value=self.list_response) + + def test_profile_type_list(self): + arglist = [] + parsed_args = self.check_parser(self.cmd, arglist, []) + columns, rows = self.cmd.take_action(parsed_args) + + self.mock_client.profile_types.assert_called_with() + self.assertEqual(self.expected_columns, columns) + self.assertEqual(self.expected_rows, rows) diff --git a/setup.cfg b/setup.cfg index acd1622d..daf224ad 100644 --- a/setup.cfg +++ b/setup.cfg @@ -32,6 +32,7 @@ openstack.cli.extension = openstack.clustering.v1 = cluster_profile_list = senlinclient.osc.v1.profile:ListProfile cluster_profile_show = senlinclient.osc.v1.profile:ShowProfile + cluster_profile_type_list = senlinclient.osc.v1.profile_type:ProfileTypeList [global] setup-hooks =