summaryrefslogtreecommitdiff
path: root/openstackclient
diff options
context:
space:
mode:
Diffstat (limited to 'openstackclient')
-rw-r--r--openstackclient/common/quota.py32
-rw-r--r--openstackclient/network/v2/network.py14
-rw-r--r--openstackclient/network/v2/port.py8
-rw-r--r--openstackclient/network/v2/subnet.py12
-rw-r--r--openstackclient/network/v2/subnet_pool.py13
-rw-r--r--openstackclient/tests/functional/common/test_quota.py13
-rw-r--r--openstackclient/tests/unit/common/test_quota.py77
-rw-r--r--openstackclient/tests/unit/network/v2/fakes.py3
-rw-r--r--openstackclient/tests/unit/network/v2/test_network.py12
-rw-r--r--openstackclient/tests/unit/network/v2/test_port.py11
-rw-r--r--openstackclient/tests/unit/network/v2/test_subnet.py64
-rw-r--r--openstackclient/tests/unit/network/v2/test_subnet_pool.py47
12 files changed, 275 insertions, 31 deletions
diff --git a/openstackclient/common/quota.py b/openstackclient/common/quota.py
index ebbf7ddf..8f099cc9 100644
--- a/openstackclient/common/quota.py
+++ b/openstackclient/common/quota.py
@@ -154,36 +154,34 @@ class SetQuota(command.Command):
if value is not None:
compute_kwargs[k] = value
- if parsed_args.project:
- project = utils.find_resource(
- identity_client.projects,
- parsed_args.project,
- )
-
if parsed_args.quota_class:
if compute_kwargs:
compute_client.quota_classes.update(
- project.id,
+ parsed_args.project,
**compute_kwargs)
if volume_kwargs:
volume_client.quota_classes.update(
- project.id,
+ parsed_args.project,
**volume_kwargs)
if network_kwargs:
sys.stderr.write("Network quotas are ignored since quota class"
"is not supported.")
else:
+ project = utils.find_resource(
+ identity_client.projects,
+ parsed_args.project,
+ ).id
if compute_kwargs:
compute_client.quotas.update(
- project.id,
+ project,
**compute_kwargs)
if volume_kwargs:
volume_client.quotas.update(
- project.id,
+ project,
**volume_kwargs)
if network_kwargs:
network_client.update_quota(
- project.id,
+ project,
**network_kwargs)
@@ -230,15 +228,15 @@ class ShowQuota(command.ShowOne):
return project
def get_compute_volume_quota(self, client, parsed_args):
- project = self._get_project(parsed_args)
-
try:
if parsed_args.quota_class:
- quota = client.quota_classes.get(project)
- elif parsed_args.default:
- quota = client.quotas.defaults(project)
+ quota = client.quota_classes.get(parsed_args.project)
else:
- quota = client.quotas.get(project)
+ project = self._get_project(parsed_args)
+ if parsed_args.default:
+ quota = client.quotas.defaults(project)
+ else:
+ quota = client.quotas.get(project)
except Exception as e:
if type(e).__name__ == 'EndpointNotFound':
return {}
diff --git a/openstackclient/network/v2/network.py b/openstackclient/network/v2/network.py
index ccc02fd8..31b173e1 100644
--- a/openstackclient/network/v2/network.py
+++ b/openstackclient/network/v2/network.py
@@ -78,6 +78,10 @@ def _get_attrs(client_manager, parsed_args):
parsed_args.availability_zone_hints is not None:
attrs['availability_zone_hints'] = parsed_args.availability_zone_hints
+ # set description
+ if parsed_args.description:
+ attrs['description'] = parsed_args.description
+
# update_external_network_options
if parsed_args.internal:
attrs['router:external'] = False
@@ -191,6 +195,11 @@ class CreateNetwork(common.NetworkAndComputeShowOne):
metavar='<project>',
help=_("Owner's project (name or ID)")
)
+ parser.add_argument(
+ '--description',
+ metavar='<description>',
+ help=_("Set network description")
+ )
identity_common.add_project_domain_option_to_parser(parser)
parser.add_argument(
'--availability-zone-hint',
@@ -420,6 +429,11 @@ class SetNetwork(command.Command):
action='store_true',
help=_("Do not share the network between projects")
)
+ parser.add_argument(
+ '--description',
+ metavar="<description",
+ help=_("Set network description")
+ )
port_security_group = parser.add_mutually_exclusive_group()
port_security_group.add_argument(
'--enable-port-security',
diff --git a/openstackclient/network/v2/port.py b/openstackclient/network/v2/port.py
index d7268573..0df78e43 100644
--- a/openstackclient/network/v2/port.py
+++ b/openstackclient/network/v2/port.py
@@ -345,6 +345,10 @@ class ListPort(command.Lister):
"This is the entity that uses the port (for example, "
"network:dhcp).")
)
+ parser.add_argument(
+ '--network',
+ metavar='<network>',
+ help=_("List only ports connected to this network (name or ID)"))
device_group = parser.add_mutually_exclusive_group()
device_group.add_argument(
'--router',
@@ -387,6 +391,10 @@ class ListPort(command.Lister):
server = utils.find_resource(compute_client.servers,
parsed_args.server)
filters['device_id'] = server.id
+ if parsed_args.network:
+ network = network_client.find_network(parsed_args.network,
+ ignore_missing=False)
+ filters['network_id'] = network.id
data = network_client.ports(**filters)
diff --git a/openstackclient/network/v2/subnet.py b/openstackclient/network/v2/subnet.py
index 8a3f229a..76453487 100644
--- a/openstackclient/network/v2/subnet.py
+++ b/openstackclient/network/v2/subnet.py
@@ -196,6 +196,8 @@ def _get_attrs(client_manager, parsed_args, is_create=True):
if ('service_types' in parsed_args and
parsed_args.service_types is not None):
attrs['service_types'] = parsed_args.service_types
+ if parsed_args.description is not None:
+ attrs['description'] = parsed_args.description
return attrs
@@ -294,6 +296,11 @@ class CreateSubnet(command.ShowOne):
metavar='<network>',
help=_("Network this subnet belongs to (name or ID)")
)
+ parser.add_argument(
+ '--description',
+ metavar='<description>',
+ help=_("Set subnet description")
+ )
_get_common_parse_arguments(parser)
return parser
@@ -496,6 +503,11 @@ class SetSubnet(command.Command):
"'none': This subnet will not use a gateway, "
"e.g.: --gateway 192.168.9.1, --gateway none.")
)
+ parser.add_argument(
+ '--description',
+ metavar='<description>',
+ help=_("Set subnet description")
+ )
_get_common_parse_arguments(parser)
return parser
diff --git a/openstackclient/network/v2/subnet_pool.py b/openstackclient/network/v2/subnet_pool.py
index 6852ca27..a01d2f7b 100644
--- a/openstackclient/network/v2/subnet_pool.py
+++ b/openstackclient/network/v2/subnet_pool.py
@@ -81,6 +81,9 @@ def _get_attrs(client_manager, parsed_args):
).id
attrs['tenant_id'] = project_id
+ if parsed_args.description is not None:
+ attrs['description'] = parsed_args.description
+
return attrs
@@ -167,6 +170,11 @@ class CreateSubnetPool(command.ShowOne):
action='store_true',
help=_("Set this subnet pool as not shared"),
)
+ parser.add_argument(
+ '--description',
+ metavar='<description>',
+ help=_("Set subnet pool description")
+ )
return parser
def take_action(self, parsed_args):
@@ -340,6 +348,11 @@ class SetSubnetPool(command.Command):
help=_("Remove address scope associated with the subnet pool")
)
_add_default_options(parser)
+ parser.add_argument(
+ '--description',
+ metavar='<description>',
+ help=_("Set subnet pool description")
+ )
return parser
diff --git a/openstackclient/tests/functional/common/test_quota.py b/openstackclient/tests/functional/common/test_quota.py
index 9687cdb0..c1de9aa9 100644
--- a/openstackclient/tests/functional/common/test_quota.py
+++ b/openstackclient/tests/functional/common/test_quota.py
@@ -26,8 +26,8 @@ class QuotaTests(base.TestCase):
cls.get_openstack_configuration_value('auth.project_name')
def test_quota_set(self):
- self.openstack('quota set --instances 11 --volumes 11 --networks 11 '
- + self.PROJECT_NAME)
+ self.openstack('quota set --instances 11 --volumes 11 --networks 11 ' +
+ self.PROJECT_NAME)
opts = self.get_opts(self.EXPECTED_FIELDS)
raw_output = self.openstack('quota show ' + self.PROJECT_NAME + opts)
self.assertEqual("11\n11\n11\n", raw_output)
@@ -51,3 +51,12 @@ class QuotaTests(base.TestCase):
raw_output = self.openstack('quota show --class')
for expected_field in self.EXPECTED_CLASS_FIELDS:
self.assertIn(expected_field, raw_output)
+
+ def test_quota_class_set(self):
+ class_name = 'default'
+ class_expected_fields = ['instances', 'volumes']
+ self.openstack('quota set --instances 11 --volumes 11 --class ' +
+ class_name)
+ opts = self.get_opts(class_expected_fields)
+ raw_output = self.openstack('quota show --class ' + class_name + opts)
+ self.assertEqual("11\n11\n", raw_output)
diff --git a/openstackclient/tests/unit/common/test_quota.py b/openstackclient/tests/unit/common/test_quota.py
index 294d772d..7dd23373 100644
--- a/openstackclient/tests/unit/common/test_quota.py
+++ b/openstackclient/tests/unit/common/test_quota.py
@@ -82,6 +82,18 @@ class TestQuotaSet(TestQuota):
loaded=True,
)
+ self.quotas_class_mock.update.return_value = FakeQuotaResource(
+ None,
+ copy.deepcopy(compute_fakes.QUOTA),
+ loaded=True,
+ )
+
+ self.volume_quotas_class_mock.update.return_value = FakeQuotaResource(
+ None,
+ copy.deepcopy(compute_fakes.QUOTA),
+ loaded=True,
+ )
+
self.network_mock = self.app.client_manager.network
self.network_mock.update_quota = mock.Mock()
@@ -294,27 +306,72 @@ class TestQuotaSet(TestQuota):
def test_quota_set_with_class(self):
arglist = [
+ '--injected-files', str(compute_fakes.injected_file_num),
+ '--injected-file-size', str(compute_fakes.injected_file_size_num),
+ '--injected-path-size', str(compute_fakes.injected_path_size_num),
+ '--key-pairs', str(compute_fakes.key_pair_num),
+ '--cores', str(compute_fakes.core_num),
+ '--ram', str(compute_fakes.ram_num),
'--instances', str(compute_fakes.instance_num),
+ '--properties', str(compute_fakes.property_num),
+ '--server-groups', str(compute_fakes.servgroup_num),
+ '--server-group-members', str(compute_fakes.servgroup_members_num),
+ '--gigabytes', str(compute_fakes.floating_ip_num),
+ '--snapshots', str(compute_fakes.fix_ip_num),
'--volumes', str(volume_fakes.QUOTA['volumes']),
'--network', str(network_fakes.QUOTA['network']),
- '--class',
- identity_fakes.project_name,
+ '--class', identity_fakes.project_name,
]
verifylist = [
+ ('injected_files', compute_fakes.injected_file_num),
+ ('injected_file_content_bytes',
+ compute_fakes.injected_file_size_num),
+ ('injected_file_path_bytes', compute_fakes.injected_path_size_num),
+ ('key_pairs', compute_fakes.key_pair_num),
+ ('cores', compute_fakes.core_num),
+ ('ram', compute_fakes.ram_num),
('instances', compute_fakes.instance_num),
+ ('metadata_items', compute_fakes.property_num),
+ ('server_groups', compute_fakes.servgroup_num),
+ ('server_group_members', compute_fakes.servgroup_members_num),
+ ('gigabytes', compute_fakes.floating_ip_num),
+ ('snapshots', compute_fakes.fix_ip_num),
('volumes', volume_fakes.QUOTA['volumes']),
('network', network_fakes.QUOTA['network']),
+ ('project', identity_fakes.project_name),
('quota_class', True),
]
+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
result = self.cmd.take_action(parsed_args)
- self.quotas_class_mock.update.assert_called_once_with(
- identity_fakes.project_id,
- **{'instances': compute_fakes.instance_num}
+
+ kwargs_compute = {
+ 'injected_files': compute_fakes.injected_file_num,
+ 'injected_file_content_bytes':
+ compute_fakes.injected_file_size_num,
+ 'injected_file_path_bytes': compute_fakes.injected_path_size_num,
+ 'key_pairs': compute_fakes.key_pair_num,
+ 'cores': compute_fakes.core_num,
+ 'ram': compute_fakes.ram_num,
+ 'instances': compute_fakes.instance_num,
+ 'metadata_items': compute_fakes.property_num,
+ 'server_groups': compute_fakes.servgroup_num,
+ 'server_group_members': compute_fakes.servgroup_members_num,
+ }
+ kwargs_volume = {
+ 'gigabytes': compute_fakes.floating_ip_num,
+ 'snapshots': compute_fakes.fix_ip_num,
+ 'volumes': volume_fakes.QUOTA['volumes'],
+ }
+
+ self.quotas_class_mock.update.assert_called_with(
+ identity_fakes.project_name,
+ **kwargs_compute
)
- self.volume_quotas_class_mock.update.assert_called_once_with(
- identity_fakes.project_id,
- **{'volumes': volume_fakes.QUOTA['volumes']}
+ self.volume_quotas_class_mock.update.assert_called_with(
+ identity_fakes.project_name,
+ **kwargs_volume
)
self.assertNotCalled(self.network_mock.update_quota)
self.assertIsNone(result)
@@ -444,9 +501,9 @@ class TestQuotaShow(TestQuota):
self.cmd.take_action(parsed_args)
self.quotas_class_mock.get.assert_called_once_with(
- identity_fakes.project_id)
+ identity_fakes.project_name)
self.volume_quotas_class_mock.get.assert_called_once_with(
- identity_fakes.project_id)
+ identity_fakes.project_name)
self.assertNotCalled(self.network.get_quota)
self.assertNotCalled(self.network.get_quota_default)
diff --git a/openstackclient/tests/unit/network/v2/fakes.py b/openstackclient/tests/unit/network/v2/fakes.py
index 4cc3512e..89b128ee 100644
--- a/openstackclient/tests/unit/network/v2/fakes.py
+++ b/openstackclient/tests/unit/network/v2/fakes.py
@@ -285,6 +285,7 @@ class FakeNetwork(object):
'id': 'network-id-' + uuid.uuid4().hex,
'name': 'network-name-' + uuid.uuid4().hex,
'status': 'ACTIVE',
+ 'description': 'network-description-' + uuid.uuid4().hex,
'tenant_id': 'project-id-' + uuid.uuid4().hex,
'admin_state_up': True,
'shared': False,
@@ -892,6 +893,7 @@ class FakeSubnet(object):
'segment_id': None,
'service_types': [],
'subnetpool_id': None,
+ 'description': 'subnet-description-' + uuid.uuid4().hex,
}
# Overwrite default attributes.
@@ -1047,6 +1049,7 @@ class FakeSubnetPool(object):
'min_prefixlen': '8',
'default_quota': None,
'ip_version': '4',
+ 'description': 'subnet-pool-description-' + uuid.uuid4().hex,
}
# Overwrite default attributes.
diff --git a/openstackclient/tests/unit/network/v2/test_network.py b/openstackclient/tests/unit/network/v2/test_network.py
index 84ead093..1094131e 100644
--- a/openstackclient/tests/unit/network/v2/test_network.py
+++ b/openstackclient/tests/unit/network/v2/test_network.py
@@ -57,6 +57,7 @@ class TestCreateNetworkIdentityV3(TestNetwork):
'admin_state_up',
'availability_zone_hints',
'availability_zones',
+ 'description',
'id',
'is_default',
'name',
@@ -73,6 +74,7 @@ class TestCreateNetworkIdentityV3(TestNetwork):
network._format_admin_state(_network.admin_state_up),
utils.format_list(_network.availability_zone_hints),
utils.format_list(_network.availability_zones),
+ _network.description,
_network.id,
_network.is_default,
_network.name,
@@ -129,6 +131,7 @@ class TestCreateNetworkIdentityV3(TestNetwork):
arglist = [
"--disable",
"--share",
+ "--description", self._network.description,
"--project", self.project.name,
"--project-domain", self.domain.name,
"--availability-zone-hint", "nova",
@@ -143,6 +146,7 @@ class TestCreateNetworkIdentityV3(TestNetwork):
verifylist = [
('disable', True),
('share', True),
+ ('description', self._network.description),
('project', self.project.name),
('project_domain', self.domain.name),
('availability_zone_hints', ["nova"]),
@@ -164,6 +168,7 @@ class TestCreateNetworkIdentityV3(TestNetwork):
'availability_zone_hints': ["nova"],
'name': self._network.name,
'shared': True,
+ 'description': self._network.description,
'tenant_id': self.project.id,
'is_default': True,
'router:external': True,
@@ -216,6 +221,7 @@ class TestCreateNetworkIdentityV2(TestNetwork):
'admin_state_up',
'availability_zone_hints',
'availability_zones',
+ 'description',
'id',
'is_default',
'name',
@@ -232,6 +238,7 @@ class TestCreateNetworkIdentityV2(TestNetwork):
network._format_admin_state(_network.admin_state_up),
utils.format_list(_network.availability_zone_hints),
utils.format_list(_network.availability_zones),
+ _network.description,
_network.id,
_network.is_default,
_network.name,
@@ -532,6 +539,7 @@ class TestSetNetwork(TestNetwork):
'--enable',
'--name', 'noob',
'--share',
+ '--description', self._network.description,
'--external',
'--default',
'--provider-network-type', 'vlan',
@@ -543,6 +551,7 @@ class TestSetNetwork(TestNetwork):
verifylist = [
('network', self._network.name),
('enable', True),
+ ('description', self._network.description),
('name', 'noob'),
('share', True),
('external', True),
@@ -560,6 +569,7 @@ class TestSetNetwork(TestNetwork):
attrs = {
'name': 'noob',
'admin_state_up': True,
+ 'description': self._network.description,
'shared': True,
'router:external': True,
'is_default': True,
@@ -624,6 +634,7 @@ class TestShowNetwork(TestNetwork):
'admin_state_up',
'availability_zone_hints',
'availability_zones',
+ 'description',
'id',
'is_default',
'name',
@@ -640,6 +651,7 @@ class TestShowNetwork(TestNetwork):
network._format_admin_state(_network.admin_state_up),
utils.format_list(_network.availability_zone_hints),
utils.format_list(_network.availability_zones),
+ _network.description,
_network.id,
_network.is_default,
_network.name,
diff --git a/openstackclient/tests/unit/network/v2/test_port.py b/openstackclient/tests/unit/network/v2/test_port.py
index afa67bba..271e8160 100644
--- a/openstackclient/tests/unit/network/v2/test_port.py
+++ b/openstackclient/tests/unit/network/v2/test_port.py
@@ -337,7 +337,11 @@ class TestListPort(TestPort):
fake_router = network_fakes.FakeRouter.create_one_router({
'id': 'fake-router-id',
})
+ fake_network = network_fakes.FakeNetwork.create_one_network({
+ 'id': 'fake-network-id',
+ })
self.network.find_router = mock.Mock(return_value=fake_router)
+ self.network.find_network = mock.Mock(return_value=fake_network)
self.app.client_manager.compute = mock.Mock()
def test_port_list_no_options(self):
@@ -414,11 +418,13 @@ class TestListPort(TestPort):
arglist = [
'--device-owner', self._ports[0].device_owner,
'--router', 'fake-router-name',
+ '--network', 'fake-network-name',
]
verifylist = [
('device_owner', self._ports[0].device_owner),
- ('router', 'fake-router-name')
+ ('router', 'fake-router-name'),
+ ('network', 'fake-network-name')
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -427,7 +433,8 @@ class TestListPort(TestPort):
self.network.ports.assert_called_once_with(**{
'device_owner': self._ports[0].device_owner,
- 'device_id': 'fake-router-id'
+ 'device_id': 'fake-router-id',
+ 'network_id': 'fake-network-id'
})
self.assertEqual(self.columns, columns)
self.assertEqual(self.data, list(data))
diff --git a/openstackclient/tests/unit/network/v2/test_subnet.py b/openstackclient/tests/unit/network/v2/test_subnet.py
index f09fe4fa..58506391 100644
--- a/openstackclient/tests/unit/network/v2/test_subnet.py
+++ b/openstackclient/tests/unit/network/v2/test_subnet.py
@@ -110,6 +110,7 @@ class TestCreateSubnet(TestSubnet):
columns = (
'allocation_pools',
'cidr',
+ 'description',
'dns_nameservers',
'enable_dhcp',
'gateway_ip',
@@ -129,6 +130,7 @@ class TestCreateSubnet(TestSubnet):
data = (
subnet_v2._format_allocation_pools(_subnet.allocation_pools),
_subnet.cidr,
+ _subnet.description,
utils.format_list(_subnet.dns_nameservers),
_subnet.enable_dhcp,
_subnet.gateway_ip,
@@ -148,6 +150,7 @@ class TestCreateSubnet(TestSubnet):
data_subnet_pool = (
subnet_v2._format_allocation_pools(_subnet_from_pool.allocation_pools),
_subnet_from_pool.cidr,
+ _subnet_from_pool.description,
utils.format_list(_subnet_from_pool.dns_nameservers),
_subnet_from_pool.enable_dhcp,
_subnet_from_pool.gateway_ip,
@@ -167,6 +170,7 @@ class TestCreateSubnet(TestSubnet):
data_ipv6 = (
subnet_v2._format_allocation_pools(_subnet_ipv6.allocation_pools),
_subnet_ipv6.cidr,
+ _subnet_ipv6.description,
utils.format_list(_subnet_ipv6.dns_nameservers),
_subnet_ipv6.enable_dhcp,
_subnet_ipv6.gateway_ip,
@@ -427,6 +431,40 @@ class TestCreateSubnet(TestSubnet):
self.assertEqual(self.columns, columns)
self.assertEqual(self.data, data)
+ def test_create_with_description(self):
+ # Mock SDK calls for this test.
+ self.network.create_subnet = mock.Mock(return_value=self._subnet)
+ self._network.id = self._subnet.network_id
+
+ arglist = [
+ "--subnet-range", self._subnet.cidr,
+ "--network", self._subnet.network_id,
+ "--description", self._subnet.description,
+ self._subnet.name,
+ ]
+ verifylist = [
+ ('name', self._subnet.name),
+ ('description', self._subnet.description),
+ ('subnet_range', self._subnet.cidr),
+ ('network', self._subnet.network_id),
+ ('ip_version', self._subnet.ip_version),
+ ('gateway', 'auto'),
+
+ ]
+
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+ columns, data = self.cmd.take_action(parsed_args)
+
+ self.network.create_subnet.assert_called_once_with(**{
+ 'cidr': self._subnet.cidr,
+ 'ip_version': self._subnet.ip_version,
+ 'name': self._subnet.name,
+ 'network_id': self._subnet.network_id,
+ 'description': self._subnet.description,
+ })
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.data, data)
+
class TestDeleteSubnet(TestSubnet):
@@ -876,6 +914,30 @@ class TestSetSubnet(TestSubnet):
_testsubnet, **attrs)
self.assertIsNone(result)
+ def test_set_non_append_options(self):
+ arglist = [
+ "--description", "new_description",
+ "--dhcp",
+ "--gateway", self._subnet.gateway_ip,
+ self._subnet.name,
+ ]
+ verifylist = [
+ ('description', "new_description"),
+ ('dhcp', True),
+ ('gateway', self._subnet.gateway_ip),
+ ('subnet', self._subnet.name),
+ ]
+
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+ result = self.cmd.take_action(parsed_args)
+ attrs = {
+ 'enable_dhcp': True,
+ 'gateway_ip': self._subnet.gateway_ip,
+ 'description': "new_description",
+ }
+ self.network.update_subnet.assert_called_with(self._subnet, **attrs)
+ self.assertIsNone(result)
+
class TestShowSubnet(TestSubnet):
# The subnets to be shown
@@ -884,6 +946,7 @@ class TestShowSubnet(TestSubnet):
columns = (
'allocation_pools',
'cidr',
+ 'description',
'dns_nameservers',
'enable_dhcp',
'gateway_ip',
@@ -903,6 +966,7 @@ class TestShowSubnet(TestSubnet):
data = (
subnet_v2._format_allocation_pools(_subnet.allocation_pools),
_subnet.cidr,
+ _subnet.description,
utils.format_list(_subnet.dns_nameservers),
_subnet.enable_dhcp,
_subnet.gateway_ip,
diff --git a/openstackclient/tests/unit/network/v2/test_subnet_pool.py b/openstackclient/tests/unit/network/v2/test_subnet_pool.py
index 251323d9..fa6ffff3 100644
--- a/openstackclient/tests/unit/network/v2/test_subnet_pool.py
+++ b/openstackclient/tests/unit/network/v2/test_subnet_pool.py
@@ -50,6 +50,7 @@ class TestCreateSubnetPool(TestSubnetPool):
'address_scope_id',
'default_prefixlen',
'default_quota',
+ 'description',
'id',
'ip_version',
'is_default',
@@ -64,6 +65,7 @@ class TestCreateSubnetPool(TestSubnetPool):
_subnet_pool.address_scope_id,
_subnet_pool.default_prefixlen,
_subnet_pool.default_quota,
+ _subnet_pool.description,
_subnet_pool.id,
_subnet_pool.ip_version,
_subnet_pool.is_default,
@@ -245,6 +247,29 @@ class TestCreateSubnetPool(TestSubnetPool):
self.assertEqual(self.columns, columns)
self.assertEqual(self.data, data)
+ def test_create_with_description(self):
+ arglist = [
+ '--pool-prefix', '10.0.10.0/24',
+ '--description', self._subnet_pool.description,
+ self._subnet_pool.name,
+ ]
+ verifylist = [
+ ('prefixes', ['10.0.10.0/24']),
+ ('description', self._subnet_pool.description),
+ ('name', self._subnet_pool.name),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ columns, data = (self.cmd.take_action(parsed_args))
+
+ self.network.create_subnet_pool.assert_called_once_with(**{
+ 'name': self._subnet_pool.name,
+ 'prefixes': ['10.0.10.0/24'],
+ 'description': self._subnet_pool.description,
+ })
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.data, data)
+
class TestDeleteSubnetPool(TestSubnetPool):
@@ -749,6 +774,26 @@ class TestSetSubnetPool(TestSubnetPool):
self.assertRaises(tests_utils.ParserException, self.check_parser,
self.cmd, arglist, verifylist)
+ def test_set_description(self):
+ arglist = [
+ '--description', 'new_description',
+ self._subnet_pool.name,
+ ]
+ verifylist = [
+ ('description', "new_description"),
+ ('subnet_pool', self._subnet_pool.name),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ result = self.cmd.take_action(parsed_args)
+
+ attrs = {
+ 'description': "new_description",
+ }
+ self.network.update_subnet_pool.assert_called_once_with(
+ self._subnet_pool, **attrs)
+ self.assertIsNone(result)
+
class TestShowSubnetPool(TestSubnetPool):
@@ -759,6 +804,7 @@ class TestShowSubnetPool(TestSubnetPool):
'address_scope_id',
'default_prefixlen',
'default_quota',
+ 'description',
'id',
'ip_version',
'is_default',
@@ -774,6 +820,7 @@ class TestShowSubnetPool(TestSubnetPool):
_subnet_pool.address_scope_id,
_subnet_pool.default_prefixlen,
_subnet_pool.default_quota,
+ _subnet_pool.description,
_subnet_pool.id,
_subnet_pool.ip_version,
_subnet_pool.is_default,