summaryrefslogtreecommitdiff
path: root/openstackclient
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2016-09-19 14:14:31 +0000
committerGerrit Code Review <review@openstack.org>2016-09-19 14:14:31 +0000
commit6d2412b190a6feabe7b56c102e12e8c3a34fa7a9 (patch)
tree0baa8c2e272d6f4f75586aa5838ace81a108cc56 /openstackclient
parente1cdba48f4b65975539fb35ccd0c738508eca21a (diff)
parentd44782bc089d6f3092cc2ee22ee4a13ea0c40ce9 (diff)
downloadpython-openstackclient-6d2412b190a6feabe7b56c102e12e8c3a34fa7a9.tar.gz
Merge "Add filtering options to os subnet list command"
Diffstat (limited to 'openstackclient')
-rw-r--r--openstackclient/network/v2/subnet.py51
-rw-r--r--openstackclient/tests/unit/network/v2/test_subnet.py110
2 files changed, 159 insertions, 2 deletions
diff --git a/openstackclient/network/v2/subnet.py b/openstackclient/network/v2/subnet.py
index f1c7d15d..8a3f229a 100644
--- a/openstackclient/network/v2/subnet.py
+++ b/openstackclient/network/v2/subnet.py
@@ -381,9 +381,41 @@ class ListSubnet(command.Lister):
"Must be a valid device owner value for a network port "
"(repeat option to list multiple service types)")
)
+ parser.add_argument(
+ '--project',
+ metavar='<project>',
+ help=_("List only subnets which belong to a given project "
+ "(name or ID) in output")
+ )
+ identity_common.add_project_domain_option_to_parser(parser)
+ parser.add_argument(
+ '--network',
+ metavar='<network>',
+ help=_("List only subnets which belong to a given network "
+ "(name or ID) in output")
+ )
+ parser.add_argument(
+ '--gateway',
+ metavar='<gateway>',
+ help=_("List only subnets of given gateway IP in output")
+ )
+ parser.add_argument(
+ '--name',
+ metavar='<name>',
+ help=_("List only subnets of given name in output")
+ )
+ parser.add_argument(
+ '--subnet-range',
+ metavar='<subnet-range>',
+ help=_("List only subnets of given subnet range "
+ "(in CIDR notation) in output "
+ "e.g.: --subnet-range 10.10.0.0/16")
+ )
return parser
def take_action(self, parsed_args):
+ identity_client = self.app.client_manager.identity
+ network_client = self.app.client_manager.network
filters = {}
if parsed_args.ip_version:
filters['ip_version'] = parsed_args.ip_version
@@ -393,7 +425,24 @@ class ListSubnet(command.Lister):
filters['enable_dhcp'] = False
if parsed_args.service_types:
filters['service_types'] = parsed_args.service_types
- data = self.app.client_manager.network.subnets(**filters)
+ if parsed_args.project:
+ project_id = identity_common.find_project(
+ identity_client,
+ parsed_args.project,
+ parsed_args.project_domain,
+ ).id
+ filters['tenant_id'] = project_id
+ if parsed_args.network:
+ network_id = network_client.find_network(parsed_args.network,
+ ignore_missing=False).id
+ filters['network_id'] = network_id
+ if parsed_args.gateway:
+ filters['gateway_ip'] = parsed_args.gateway
+ if parsed_args.name:
+ filters['name'] = parsed_args.name
+ if parsed_args.subnet_range:
+ filters['cidr'] = parsed_args.subnet_range
+ data = network_client.subnets(**filters)
headers = ('ID', 'Name', 'Network', 'Subnet')
columns = ('id', 'name', 'network_id', 'cidr')
diff --git a/openstackclient/tests/unit/network/v2/test_subnet.py b/openstackclient/tests/unit/network/v2/test_subnet.py
index 6d762344..f09fe4fa 100644
--- a/openstackclient/tests/unit/network/v2/test_subnet.py
+++ b/openstackclient/tests/unit/network/v2/test_subnet.py
@@ -646,7 +646,6 @@ class TestListSubnet(TestSubnet):
('service_types', ['network:router_gateway']),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
-
columns, data = self.cmd.take_action(parsed_args)
filters = {'service_types': ['network:router_gateway']}
@@ -654,6 +653,24 @@ class TestListSubnet(TestSubnet):
self.assertEqual(self.columns, columns)
self.assertEqual(self.data, list(data))
+ def test_subnet_list_project(self):
+ project = identity_fakes_v3.FakeProject.create_one_project()
+ self.projects_mock.get.return_value = project
+ arglist = [
+ '--project', project.id,
+ ]
+ verifylist = [
+ ('project', project.id),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ columns, data = self.cmd.take_action(parsed_args)
+ filters = {'tenant_id': project.id}
+
+ self.network.subnets.assert_called_once_with(**filters)
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.data, list(data))
+
def test_subnet_list_service_type_multiple(self):
arglist = [
'--service-type', 'network:router_gateway',
@@ -668,6 +685,97 @@ class TestListSubnet(TestSubnet):
columns, data = self.cmd.take_action(parsed_args)
filters = {'service_types': ['network:router_gateway',
'network:floatingip_agent_gateway']}
+ self.network.subnets.assert_called_once_with(**filters)
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.data, list(data))
+
+ def test_subnet_list_project_domain(self):
+ project = identity_fakes_v3.FakeProject.create_one_project()
+ self.projects_mock.get.return_value = project
+ arglist = [
+ '--project', project.id,
+ '--project-domain', project.domain_id,
+ ]
+ verifylist = [
+ ('project', project.id),
+ ('project_domain', project.domain_id),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ columns, data = self.cmd.take_action(parsed_args)
+ filters = {'tenant_id': project.id}
+
+ self.network.subnets.assert_called_once_with(**filters)
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.data, list(data))
+
+ def test_subnet_list_network(self):
+ network = network_fakes.FakeNetwork.create_one_network()
+ self.network.find_network = mock.Mock(return_value=network)
+ arglist = [
+ '--network', network.id,
+ ]
+ verifylist = [
+ ('network', network.id),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ columns, data = self.cmd.take_action(parsed_args)
+ filters = {'network_id': network.id}
+
+ self.network.subnets.assert_called_once_with(**filters)
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.data, list(data))
+
+ def test_subnet_list_gateway(self):
+ subnet = network_fakes.FakeSubnet.create_one_subnet()
+ self.network.find_network = mock.Mock(return_value=subnet)
+ arglist = [
+ '--gateway', subnet.gateway_ip,
+ ]
+ verifylist = [
+ ('gateway', subnet.gateway_ip),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ columns, data = self.cmd.take_action(parsed_args)
+ filters = {'gateway_ip': subnet.gateway_ip}
+
+ self.network.subnets.assert_called_once_with(**filters)
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.data, list(data))
+
+ def test_subnet_list_name(self):
+ subnet = network_fakes.FakeSubnet.create_one_subnet()
+ self.network.find_network = mock.Mock(return_value=subnet)
+ arglist = [
+ '--name', subnet.name,
+ ]
+ verifylist = [
+ ('name', subnet.name),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ columns, data = self.cmd.take_action(parsed_args)
+ filters = {'name': subnet.name}
+
+ self.network.subnets.assert_called_once_with(**filters)
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.data, list(data))
+
+ def test_subnet_list_subnet_range(self):
+ subnet = network_fakes.FakeSubnet.create_one_subnet()
+ self.network.find_network = mock.Mock(return_value=subnet)
+ arglist = [
+ '--subnet-range', subnet.cidr,
+ ]
+ verifylist = [
+ ('subnet_range', subnet.cidr),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ columns, data = self.cmd.take_action(parsed_args)
+ filters = {'cidr': subnet.cidr}
self.network.subnets.assert_called_once_with(**filters)
self.assertEqual(self.columns, columns)