diff --git a/moganclient/common/utils.py b/moganclient/common/utils.py index 012cb3c..e21f63e 100644 --- a/moganclient/common/utils.py +++ b/moganclient/common/utils.py @@ -12,7 +12,6 @@ # License for the specific language governing permissions and limitations # under the License. # - import logging @@ -35,3 +34,32 @@ def get_response_body(resp): else: body = None return body + + +def addresses_formatter(network_client, networks): + output = [] + for (network, addresses) in networks.items(): + if not addresses: + continue + addrs = [addr['addr'] for addr in addresses] + network_data = network_client.find_network( + network, ignore_missing=False) + net_ident = network_data.name or network_data.id + addresses_csv = ', '.join(addrs) + group = "%s=%s" % (net_ident, addresses_csv) + output.append(group) + return '; '.join(output) + + +def image_formatter(image_client, image_id): + if image_id: + image = image_client.images.get(image_id) + return '%s (%s)' % (image.name, image_id) + return '' + + +def flavor_formatter(bc_client, flavor_id): + if flavor_id: + flavor = bc_client.flavor.get(flavor_id) + return '%s (%s)' % (flavor.name, flavor_id) + return '' diff --git a/moganclient/osc/v1/manageable_server.py b/moganclient/osc/v1/manageable_server.py index 6905c0d..b6b77ed 100644 --- a/moganclient/osc/v1/manageable_server.py +++ b/moganclient/osc/v1/manageable_server.py @@ -17,15 +17,13 @@ """Mogan v1 manageable servers action implementations""" import json -import logging from osc_lib.cli import parseractions from osc_lib.command import command from osc_lib import utils from moganclient.common.i18n import _ - -LOG = logging.getLogger(__name__) +from moganclient.common import utils as cli_utils class ListManageableServer(command.Lister): @@ -124,22 +122,10 @@ class ManageServer(command.ShowOne): return parser - def _format_image_field(self, data): - image_client = self.app.client_manager.image - image_uuid = data._info.pop('image_uuid') - if image_uuid: - image = image_client.images.get(image_uuid) - return '%s (%s)' % (image.name, image_uuid) - - def _format_flavor_field(self, data): - bc_client = self.app.client_manager.baremetal_compute - flavor_uuid = data._info.pop('flavor_uuid') - if flavor_uuid: - flavor = bc_client.flavor.get(flavor_uuid) - return '%s (%s)' % (flavor.name, flavor_uuid) - def take_action(self, parsed_args): bc_client = self.app.client_manager.baremetal_compute + image_client = self.app.client_manager.image + network_client = self.app.client_manager.network boot_kwargs = dict( name=parsed_args.name, @@ -152,8 +138,13 @@ class ManageServer(command.ShowOne): data._info.update( { 'properties': utils.format_dict(data._info.pop('metadata')), - 'flavor': self._format_flavor_field(data), - 'image': self._format_image_field(data) + 'flavor': cli_utils.flavor_formatter( + bc_client, data._info.pop('flavor_uuid')), + 'image': cli_utils.image_formatter( + image_client, data._info.pop('image_uuid')), + 'addresses': cli_utils.addresses_formatter( + network_client, + data._info.pop('addresses')) }, ) diff --git a/moganclient/osc/v1/server.py b/moganclient/osc/v1/server.py index ea94090..abf1cd6 100644 --- a/moganclient/osc/v1/server.py +++ b/moganclient/osc/v1/server.py @@ -15,7 +15,7 @@ """Mogan v1 Baremetal server action implementations""" - +import functools import io import json import logging @@ -27,25 +27,11 @@ from osc_lib import exceptions from osc_lib import utils from moganclient.common.i18n import _ +from moganclient.common import utils as cli_utils LOG = logging.getLogger(__name__) -def _addresses_formatter(network_client, networks): - output = [] - for (network, addresses) in networks.items(): - if not addresses: - continue - addrs = [addr['addr'] for addr in addresses] - network_data = network_client.find_network( - network, ignore_missing=False) - net_ident = network_data.name or network_data.id - addresses_csv = ', '.join(addrs) - group = "%s=%s" % (net_ident, addresses_csv) - output.append(group) - return '; '.join(output) - - class ServersActionBase(command.Command): def _get_parser_with_action(self, prog_name, action): parser = super(ServersActionBase, self).get_parser(prog_name) @@ -394,8 +380,8 @@ class ListServer(command.Lister): data = bc_client.server.list(detailed=True, all_projects=parsed_args.all_projects) net_client = self.app.client_manager.network - addr_formatter = lambda addr: _addresses_formatter(net_client, addr) - formatters = {'addresses': addr_formatter, + addr_fmt = functools.partial(cli_utils.addresses_formatter, net_client) + formatters = {'addresses': addr_fmt, 'metadata': utils.format_dict } @@ -455,20 +441,6 @@ class ShowServer(command.ShowOne): ) return parser - def _format_image_field(self, data): - image_client = self.app.client_manager.image - image_uuid = data._info.pop('image_uuid') - if image_uuid: - image = image_client.images.get(image_uuid) - return '%s (%s)' % (image.name, image_uuid) - - def _format_flavor_field(self, data): - bc_client = self.app.client_manager.baremetal_compute - flavor_uuid = data._info.pop('flavor_uuid') - if flavor_uuid: - flavor = bc_client.flavor.get(flavor_uuid) - return '%s (%s)' % (flavor.name, flavor_uuid) - def take_action(self, parsed_args): bc_client = self.app.client_manager.baremetal_compute data = utils.find_resource( @@ -478,14 +450,17 @@ class ShowServer(command.ShowOne): # Special mapping for columns to make the output easier to read: # 'metadata' --> 'properties' network_client = self.app.client_manager.network + image_client = self.app.client_manager.image data._info.update( { 'properties': utils.format_dict(data._info.pop('metadata')), - 'addresses': _addresses_formatter( + 'addresses': cli_utils.addresses_formatter( network_client, data._info.pop('addresses')), - 'image': self._format_image_field(data), - 'flavor': self._format_flavor_field(data) + 'image': cli_utils.image_formatter( + image_client, data._info.pop('image_uuid')), + 'flavor': cli_utils.flavor_formatter( + bc_client, data._info.pop('flavor_uuid')) }, ) diff --git a/moganclient/tests/unit/osc/v1/test_manageable_server.py b/moganclient/tests/unit/osc/v1/test_manageable_server.py index abb7496..7e98fa0 100644 --- a/moganclient/tests/unit/osc/v1/test_manageable_server.py +++ b/moganclient/tests/unit/osc/v1/test_manageable_server.py @@ -161,11 +161,11 @@ class TestServerManage(TestManageableServer): data=called_data) self.assertEqual(self.columns, columns) expected_data = ( - fk_server.addresses, + '', fk_server.availability_zone, fk_server.created_at, fk_server.description, - None, + '', 'test-image (%s)' % fk_server.image_uuid, fk_server.links, fk_server.name,