Implement '-F' option for 'net-ip-availability-*' command respond

In respond to 'net-ip-availability-list' and 'net-ip-availability-show'
commands, follow the '-F' or '--field' option when present

Change-Id: I688d77167a401aa07771fee5a46323c416a546ee
Closes-Bug: #1586908
This commit is contained in:
LiuYong 2016-05-31 23:17:21 +08:00 committed by Kevin Benton
parent e67ed785b7
commit ac8348853b
2 changed files with 37 additions and 2 deletions

7
neutron/services/network_ip_availability/plugin.py Normal file → Executable file
View File

@ -15,6 +15,7 @@
from neutron_lib import exceptions
from neutron.db import _utils as db_utils
import neutron.db.db_base_plugin_v2 as db_base_plugin_v2
import neutron.db.network_ip_availability_db as ip_availability_db
@ -42,14 +43,16 @@ class NetworkIPAvailabilityPlugin(ip_availability_db.IpAvailabilityMixin,
def get_network_ip_availabilities(self, context, filters=None,
fields=None):
"""Returns ip availability data for a collection of networks."""
return super(NetworkIPAvailabilityPlugin,
net_ip_availabilities = super(NetworkIPAvailabilityPlugin,
self).get_network_ip_availabilities(context, filters)
return [db_utils.resource_fields(net_ip_availability, fields)
for net_ip_availability in net_ip_availabilities]
def get_network_ip_availability(self, context, id=None, fields=None):
"""Return ip availability data for a specific network id."""
filters = {'network_id': [id]}
result = self.get_network_ip_availabilities(context, filters)
if result:
return result[0]
return db_utils.resource_fields(result[0], fields)
else:
raise exceptions.NetworkNotFound(net_id=id)

View File

@ -59,6 +59,38 @@ class TestNetworkIPAvailabilityAPI(
expected_used_ips=expected_used_ips,
expected_total_ips=expected_total_ips)
def test_usages_query_list_with_fields_total_ips(self):
with self.network() as net:
with self.subnet(network=net):
# list by query fields: total_ips
params = 'fields=total_ips'
request = self.new_list_request(API_RESOURCE, params=params)
response = self.deserialize(self.fmt,
request.get_response(self.ext_api))
self.assertIn(IP_AVAILS_KEY, response)
self.assertEqual(1, len(response[IP_AVAILS_KEY]))
availability = response[IP_AVAILS_KEY][0]
self.assertIn('total_ips', availability)
self.assertEqual(253, availability['total_ips'])
self.assertNotIn('network_id', availability)
def test_usages_query_show_with_fields_total_ips(self):
with self.network() as net:
with self.subnet(network=net):
network = net['network']
# Show by query fields: total_ips
params = ['total_ips']
request = self.new_show_request(API_RESOURCE,
network['id'],
fields=params)
response = self.deserialize(
self.fmt, request.get_response(self.ext_api))
self.assertIn(IP_AVAIL_KEY, response)
availability = response[IP_AVAIL_KEY]
self.assertIn('total_ips', availability)
self.assertEqual(253, availability['total_ips'])
self.assertNotIn('network_id', availability)
@staticmethod
def _find_availability(availabilities, net_id):
for ip_availability in availabilities: