From 2faea31cb65cfa6ed54f796af0d0efe1a0b83b6a Mon Sep 17 00:00:00 2001 From: Zhenguo Niu Date: Tue, 29 Aug 2017 10:17:35 +0800 Subject: [PATCH] Format server addresses This replaces server.nics with server.addresses. Change-Id: Iefb3189f4174163eab0ddbcce66b6af00e44043d --- moganclient/osc/v1/server.py | 49 +++++++++++++++----- moganclient/tests/unit/fakes.py | 23 ++------- moganclient/tests/unit/osc/v1/test_server.py | 43 +++++++++-------- 3 files changed, 65 insertions(+), 50 deletions(-) diff --git a/moganclient/osc/v1/server.py b/moganclient/osc/v1/server.py index 30a08df..11c7935 100644 --- a/moganclient/osc/v1/server.py +++ b/moganclient/osc/v1/server.py @@ -31,6 +31,21 @@ from moganclient.common.i18n import _ 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) @@ -296,15 +311,20 @@ class ListServer(command.Lister): ) return parser - @staticmethod - def _nics_formatter(nics): - return_info = [] - for nics in nics: - port_ips = [] - for fixed_ip in nics['fixed_ips']: - port_ips.append(fixed_ip['ip_address']) - return_info.append(', '.join(port_ips)) - return '; '.join(return_info) + def _addresses_formatter(self, networks): + output = [] + network_client = self.app.client_manager.network + 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 take_action(self, parsed_args): bc_client = self.app.client_manager.baremetal_compute @@ -327,7 +347,7 @@ class ListServer(command.Lister): "name", "status", "power_state", - "nics", + "addresses", "image_uuid", "flavor_uuid", "availability_zone", @@ -345,13 +365,14 @@ class ListServer(command.Lister): "uuid", "name", "status", - "nics", + "addresses", "image_uuid", ) data = bc_client.server.list(detailed=True, all_projects=parsed_args.all_projects) - formatters = {'nics': self._nics_formatter, + + formatters = {'addresses': self._addresses_formatter, 'metadata': utils.format_dict} return (column_headers, (utils.get_item_properties( @@ -379,9 +400,13 @@ class ShowServer(command.ShowOne): ) # Special mapping for columns to make the output easier to read: # 'metadata' --> 'properties' + network_client = self.app.client_manager.network data._info.update( { 'properties': utils.format_dict(data._info.pop('metadata')), + 'addresses': _addresses_formatter( + network_client, + data._info.pop('addresses')), }, ) diff --git a/moganclient/tests/unit/fakes.py b/moganclient/tests/unit/fakes.py index 01ba810..737212e 100644 --- a/moganclient/tests/unit/fakes.py +++ b/moganclient/tests/unit/fakes.py @@ -249,11 +249,11 @@ class FakeServer(object): attrs = attrs or {} attrs_data = copy.deepcopy(attrs) networks = attrs_data.pop('networks', []) - nics = [] + addresses = {} for network in networks: - nics.append({'netowrk_id': network.get('uuid'), - 'port_id': uuidutils.generate_uuid()}) - attrs_data["nics"] = nics + addresses[network.get('name')] = [ + {"addr": "11.0.0.6", "type": "fixed"}] + attrs_data["addresses"] = addresses # Set default attribute server_info = { @@ -265,20 +265,7 @@ class FakeServer(object): "links": [], "name": "server-name-" + uuidutils.generate_uuid( dashed=False), - "nics": [{ - "network_id": uuidutils.generate_uuid(), - "port_id": uuidutils.generate_uuid(), - "floating_ip": '', - "port_type": '', - "mac_address": "52:54:00:cc:ed:87", - "fixed_ips": [{ - "subnet_id": uuidutils.generate_uuid(), - "ip_address": "11.0.0.6" - }, { - "subnet_id": uuidutils.generate_uuid(), - "ip_address": "fdaa:67c7:e09e:0:5054:ff:fecc:ed87" - }] - }], + "addresses": {}, "updated_at": None, "uuid": "server-id-" + uuidutils.generate_uuid( dashed=False), diff --git a/moganclient/tests/unit/osc/v1/test_server.py b/moganclient/tests/unit/osc/v1/test_server.py index f8e738c..9ae186d 100644 --- a/moganclient/tests/unit/osc/v1/test_server.py +++ b/moganclient/tests/unit/osc/v1/test_server.py @@ -30,6 +30,7 @@ class TestServer(test_base.TestBaremetalComputeV1): fake_server = fakes.FakeServer.create_one_server() columns = ( + 'addresses', 'availability_zone', 'created_at', 'description', @@ -39,12 +40,12 @@ class TestServer(test_base.TestBaremetalComputeV1): 'max_count', 'min_count', 'name', - 'nics', 'properties', 'updated_at', 'uuid') data = ( + fake_server.addresses, fake_server.availability_zone, fake_server.created_at, fake_server.description, @@ -54,7 +55,6 @@ class TestServer(test_base.TestBaremetalComputeV1): 1, 1, fake_server.name, - fake_server.nics, fake_server.updated_at, fake_server.uuid) @@ -133,6 +133,7 @@ class TestServerCreate(TestServer): data=called_data) self.assertEqual(self.columns, columns) expected_data = ( + fk_server.addresses, fk_server.availability_zone, fk_server.created_at, fk_server.description, @@ -142,7 +143,6 @@ class TestServerCreate(TestServer): 1, 1, fk_server.name, - fk_server.nics, utils.format_dict(fk_server.metadata), fk_server.updated_at, fk_server.uuid) @@ -272,24 +272,27 @@ class TestServerList(test_base.TestBaremetalComputeV1): def setUp(self): super(TestServerList, self).setUp() self.cmd = server.ListServer(self.app, None) - fake_return_net = [{ - "network_id": "f31af5a2-f14d-4007-b2e5-abeb82429b87", - "port_id": "99845c22-6268-46c1-b068-1dbcb8adaf68", - "floating_ip": '', - "port_type": '', - "mac_address": "52:54:00:cc:ed:87", - "fixed_ips": [{ - "subnet_id": "5a324b29-9aca-43d8-a6c3-31986dda95b5", - "ip_address": "172.24.4.4" - }, { - "subnet_id": "9baceab1-40ec-4c53-ad83-530a625bddb1", - "ip_address": "2001:db8::a" - }] - }] + network_obj = mock.Mock() + network_obj.name = 'private' + self.app.client_manager.network = mock.Mock() + self.app.client_manager.network.find_network = \ + mock.Mock(return_value=network_obj) + fake_return_net = { + "private": [ + { + "addr": "172.24.4.4", + "type": "fixed" + }, + { + "addr": "2001:db8::a", + "type": "fixed" + } + ] + } self.fake_servers = fakes.FakeServer.create_servers( attrs={'status': 'active', 'power_state': 'power on'}, count=3) for s in self.fake_servers: - setattr(s, 'nics', fake_return_net) + setattr(s, 'addresses', fake_return_net) self.list_columns = ( "UUID", "Name", @@ -314,7 +317,7 @@ class TestServerList(test_base.TestBaremetalComputeV1): self.fake_servers[i].uuid, self.fake_servers[i].name, self.fake_servers[i].status, - '172.24.4.4, 2001:db8::a', + 'private=172.24.4.4, 2001:db8::a', self.fake_servers[i].image_uuid, ) for i in range(3)) @@ -323,7 +326,7 @@ class TestServerList(test_base.TestBaremetalComputeV1): self.fake_servers[i].name, self.fake_servers[i].status, self.fake_servers[i].power_state, - '172.24.4.4, 2001:db8::a', + 'private=172.24.4.4, 2001:db8::a', self.fake_servers[i].image_uuid, self.fake_servers[i].flavor_uuid, self.fake_servers[i].availability_zone,