Format server addresses

This replaces server.nics with server.addresses.

Change-Id: Iefb3189f4174163eab0ddbcce66b6af00e44043d
This commit is contained in:
Zhenguo Niu 2017-08-29 10:17:35 +08:00
parent fa710a1766
commit 2faea31cb6
3 changed files with 65 additions and 50 deletions

View File

@ -31,6 +31,21 @@ from moganclient.common.i18n import _
LOG = logging.getLogger(__name__) 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): class ServersActionBase(command.Command):
def _get_parser_with_action(self, prog_name, action): def _get_parser_with_action(self, prog_name, action):
parser = super(ServersActionBase, self).get_parser(prog_name) parser = super(ServersActionBase, self).get_parser(prog_name)
@ -296,15 +311,20 @@ class ListServer(command.Lister):
) )
return parser return parser
@staticmethod def _addresses_formatter(self, networks):
def _nics_formatter(nics): output = []
return_info = [] network_client = self.app.client_manager.network
for nics in nics: for (network, addresses) in networks.items():
port_ips = [] if not addresses:
for fixed_ip in nics['fixed_ips']: continue
port_ips.append(fixed_ip['ip_address']) addrs = [addr['addr'] for addr in addresses]
return_info.append(', '.join(port_ips)) network_data = network_client.find_network(
return '; '.join(return_info) 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): def take_action(self, parsed_args):
bc_client = self.app.client_manager.baremetal_compute bc_client = self.app.client_manager.baremetal_compute
@ -327,7 +347,7 @@ class ListServer(command.Lister):
"name", "name",
"status", "status",
"power_state", "power_state",
"nics", "addresses",
"image_uuid", "image_uuid",
"flavor_uuid", "flavor_uuid",
"availability_zone", "availability_zone",
@ -345,13 +365,14 @@ class ListServer(command.Lister):
"uuid", "uuid",
"name", "name",
"status", "status",
"nics", "addresses",
"image_uuid", "image_uuid",
) )
data = bc_client.server.list(detailed=True, data = bc_client.server.list(detailed=True,
all_projects=parsed_args.all_projects) all_projects=parsed_args.all_projects)
formatters = {'nics': self._nics_formatter,
formatters = {'addresses': self._addresses_formatter,
'metadata': utils.format_dict} 'metadata': utils.format_dict}
return (column_headers, return (column_headers,
(utils.get_item_properties( (utils.get_item_properties(
@ -379,9 +400,13 @@ class ShowServer(command.ShowOne):
) )
# Special mapping for columns to make the output easier to read: # Special mapping for columns to make the output easier to read:
# 'metadata' --> 'properties' # 'metadata' --> 'properties'
network_client = self.app.client_manager.network
data._info.update( data._info.update(
{ {
'properties': utils.format_dict(data._info.pop('metadata')), 'properties': utils.format_dict(data._info.pop('metadata')),
'addresses': _addresses_formatter(
network_client,
data._info.pop('addresses')),
}, },
) )

View File

@ -249,11 +249,11 @@ class FakeServer(object):
attrs = attrs or {} attrs = attrs or {}
attrs_data = copy.deepcopy(attrs) attrs_data = copy.deepcopy(attrs)
networks = attrs_data.pop('networks', []) networks = attrs_data.pop('networks', [])
nics = [] addresses = {}
for network in networks: for network in networks:
nics.append({'netowrk_id': network.get('uuid'), addresses[network.get('name')] = [
'port_id': uuidutils.generate_uuid()}) {"addr": "11.0.0.6", "type": "fixed"}]
attrs_data["nics"] = nics attrs_data["addresses"] = addresses
# Set default attribute # Set default attribute
server_info = { server_info = {
@ -265,20 +265,7 @@ class FakeServer(object):
"links": [], "links": [],
"name": "server-name-" + uuidutils.generate_uuid( "name": "server-name-" + uuidutils.generate_uuid(
dashed=False), dashed=False),
"nics": [{ "addresses": {},
"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"
}]
}],
"updated_at": None, "updated_at": None,
"uuid": "server-id-" + uuidutils.generate_uuid( "uuid": "server-id-" + uuidutils.generate_uuid(
dashed=False), dashed=False),

View File

@ -30,6 +30,7 @@ class TestServer(test_base.TestBaremetalComputeV1):
fake_server = fakes.FakeServer.create_one_server() fake_server = fakes.FakeServer.create_one_server()
columns = ( columns = (
'addresses',
'availability_zone', 'availability_zone',
'created_at', 'created_at',
'description', 'description',
@ -39,12 +40,12 @@ class TestServer(test_base.TestBaremetalComputeV1):
'max_count', 'max_count',
'min_count', 'min_count',
'name', 'name',
'nics',
'properties', 'properties',
'updated_at', 'updated_at',
'uuid') 'uuid')
data = ( data = (
fake_server.addresses,
fake_server.availability_zone, fake_server.availability_zone,
fake_server.created_at, fake_server.created_at,
fake_server.description, fake_server.description,
@ -54,7 +55,6 @@ class TestServer(test_base.TestBaremetalComputeV1):
1, 1,
1, 1,
fake_server.name, fake_server.name,
fake_server.nics,
fake_server.updated_at, fake_server.updated_at,
fake_server.uuid) fake_server.uuid)
@ -133,6 +133,7 @@ class TestServerCreate(TestServer):
data=called_data) data=called_data)
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
expected_data = ( expected_data = (
fk_server.addresses,
fk_server.availability_zone, fk_server.availability_zone,
fk_server.created_at, fk_server.created_at,
fk_server.description, fk_server.description,
@ -142,7 +143,6 @@ class TestServerCreate(TestServer):
1, 1,
1, 1,
fk_server.name, fk_server.name,
fk_server.nics,
utils.format_dict(fk_server.metadata), utils.format_dict(fk_server.metadata),
fk_server.updated_at, fk_server.updated_at,
fk_server.uuid) fk_server.uuid)
@ -272,24 +272,27 @@ class TestServerList(test_base.TestBaremetalComputeV1):
def setUp(self): def setUp(self):
super(TestServerList, self).setUp() super(TestServerList, self).setUp()
self.cmd = server.ListServer(self.app, None) self.cmd = server.ListServer(self.app, None)
fake_return_net = [{ network_obj = mock.Mock()
"network_id": "f31af5a2-f14d-4007-b2e5-abeb82429b87", network_obj.name = 'private'
"port_id": "99845c22-6268-46c1-b068-1dbcb8adaf68", self.app.client_manager.network = mock.Mock()
"floating_ip": '', self.app.client_manager.network.find_network = \
"port_type": '', mock.Mock(return_value=network_obj)
"mac_address": "52:54:00:cc:ed:87", fake_return_net = {
"fixed_ips": [{ "private": [
"subnet_id": "5a324b29-9aca-43d8-a6c3-31986dda95b5", {
"ip_address": "172.24.4.4" "addr": "172.24.4.4",
}, { "type": "fixed"
"subnet_id": "9baceab1-40ec-4c53-ad83-530a625bddb1", },
"ip_address": "2001:db8::a" {
}] "addr": "2001:db8::a",
}] "type": "fixed"
}
]
}
self.fake_servers = fakes.FakeServer.create_servers( self.fake_servers = fakes.FakeServer.create_servers(
attrs={'status': 'active', 'power_state': 'power on'}, count=3) attrs={'status': 'active', 'power_state': 'power on'}, count=3)
for s in self.fake_servers: for s in self.fake_servers:
setattr(s, 'nics', fake_return_net) setattr(s, 'addresses', fake_return_net)
self.list_columns = ( self.list_columns = (
"UUID", "UUID",
"Name", "Name",
@ -314,7 +317,7 @@ class TestServerList(test_base.TestBaremetalComputeV1):
self.fake_servers[i].uuid, self.fake_servers[i].uuid,
self.fake_servers[i].name, self.fake_servers[i].name,
self.fake_servers[i].status, 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, self.fake_servers[i].image_uuid,
) for i in range(3)) ) for i in range(3))
@ -323,7 +326,7 @@ class TestServerList(test_base.TestBaremetalComputeV1):
self.fake_servers[i].name, self.fake_servers[i].name,
self.fake_servers[i].status, self.fake_servers[i].status,
self.fake_servers[i].power_state, 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].image_uuid,
self.fake_servers[i].flavor_uuid, self.fake_servers[i].flavor_uuid,
self.fake_servers[i].availability_zone, self.fake_servers[i].availability_zone,