Skip to content

Commit e7bc3d9

Browse files
committed
Fix --use-prefix-delegation subnet create argument
The --use-prefix-delegation argument when creating a subnet should not take an argument of True/False, it should simply trigger the code to set subnetpool_id value to 'prefix_delegation'. Change action to correct this. Added unit test to cover missing checks. Related-bug: #2028159 Change-Id: Ib7ee80100327b8611d4a354c7f4eb0e696c953da
1 parent d09aec3 commit e7bc3d9

2 files changed

Lines changed: 93 additions & 0 deletions

File tree

openstackclient/network/v2/subnet.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -306,6 +306,7 @@ def get_parser(self, prog_name):
306306
)
307307
subnet_pool_group.add_argument(
308308
'--use-prefix-delegation',
309+
action='store_true',
309310
help=_(
310311
"Use 'prefix-delegation' if IP is IPv6 format "
311312
"and IP would be delegated externally"

openstackclient/tests/unit/network/v2/test_subnet.py

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,26 @@ def _init_subnet_variables(self):
108108
}
109109
)
110110

111+
# An IPv6 subnet to be created with Prefix Delegation options specified
112+
self._subnet_ipv6_pd = network_fakes.FakeSubnet.create_one_subnet(
113+
attrs={
114+
'project_id': self.project.id,
115+
'cidr': '::/64',
116+
'enable_dhcp': True,
117+
'allocation_pools': [
118+
{
119+
'start': '::1',
120+
'end': '::ffff:ffff:ffff:ffff',
121+
},
122+
],
123+
'ip_version': 6,
124+
'gateway_ip': '::',
125+
'ipv6_address_mode': 'slaac',
126+
'ipv6_ra_mode': 'slaac',
127+
'subnetpool_id': 'prefix_delegation',
128+
}
129+
)
130+
111131
# The network to be returned from find_network
112132
self._network = network_fakes.create_one_network(
113133
attrs={
@@ -210,6 +230,29 @@ def _init_subnet_variables(self):
210230
format_columns.ListColumn(self._subnet_ipv6.tags),
211231
)
212232

233+
self.data_ipv6_pd = (
234+
subnet_v2.AllocationPoolsColumn(
235+
self._subnet_ipv6_pd.allocation_pools
236+
),
237+
self._subnet_ipv6_pd.cidr,
238+
self._subnet_ipv6_pd.description,
239+
format_columns.ListColumn(self._subnet_ipv6_pd.dns_nameservers),
240+
self._subnet_ipv6_pd.enable_dhcp,
241+
self._subnet_ipv6_pd.gateway_ip,
242+
subnet_v2.HostRoutesColumn(self._subnet_ipv6_pd.host_routes),
243+
self._subnet_ipv6_pd.id,
244+
self._subnet_ipv6_pd.ip_version,
245+
self._subnet_ipv6_pd.ipv6_address_mode,
246+
self._subnet_ipv6_pd.ipv6_ra_mode,
247+
self._subnet_ipv6_pd.name,
248+
self._subnet_ipv6_pd.network_id,
249+
self._subnet_ipv6_pd.project_id,
250+
self._subnet_ipv6_pd.segment_id,
251+
format_columns.ListColumn(self._subnet_ipv6_pd.service_types),
252+
self._subnet_ipv6_pd.subnetpool_id,
253+
format_columns.ListColumn(self._subnet_ipv6_pd.tags),
254+
)
255+
213256
def setUp(self):
214257
self._init_subnet_variables()
215258
super(TestCreateSubnet, self).setUp()
@@ -455,6 +498,55 @@ def test_create_options_subnet_range_ipv6(self):
455498
self.assertEqual(self.columns, columns)
456499
self.assertCountEqual(self.data_ipv6, data)
457500

501+
def test_create_options_subnet_ipv6_pd(self):
502+
# Mock SDK calls for this test.
503+
self.network_client.create_subnet.return_value = self._subnet_ipv6_pd
504+
self._network.id = self._subnet_ipv6_pd.network_id
505+
506+
arglist = [
507+
self._subnet_ipv6_pd.name,
508+
"--network",
509+
self._subnet_ipv6_pd.network_id,
510+
"--ip-version",
511+
str(self._subnet_ipv6_pd.ip_version),
512+
"--ipv6-ra-mode",
513+
self._subnet_ipv6_pd.ipv6_ra_mode,
514+
"--ipv6-address-mode",
515+
self._subnet_ipv6_pd.ipv6_address_mode,
516+
"--dhcp",
517+
"--use-prefix-delegation",
518+
]
519+
520+
verifylist = [
521+
('name', self._subnet_ipv6_pd.name),
522+
('network', self._subnet_ipv6_pd.network_id),
523+
('ip_version', self._subnet_ipv6_pd.ip_version),
524+
('ipv6_ra_mode', self._subnet_ipv6_pd.ipv6_ra_mode),
525+
('ipv6_address_mode', self._subnet_ipv6_pd.ipv6_address_mode),
526+
('dhcp', self._subnet_ipv6_pd.enable_dhcp),
527+
('use_prefix_delegation', True),
528+
]
529+
530+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
531+
columns, data = self.cmd.take_action(parsed_args)
532+
533+
# Calling with --use-prefix-delegation will set the subnetpool_id
534+
# to 'prefix_delegation'
535+
self.network_client.create_subnet.assert_called_once_with(
536+
**{
537+
'enable_dhcp': self._subnet_ipv6_pd.enable_dhcp,
538+
'ip_version': self._subnet_ipv6_pd.ip_version,
539+
'ipv6_address_mode': self._subnet_ipv6_pd.ipv6_address_mode,
540+
'ipv6_ra_mode': self._subnet_ipv6_pd.ipv6_ra_mode,
541+
'name': self._subnet_ipv6_pd.name,
542+
'network_id': self._subnet_ipv6_pd.network_id,
543+
'subnetpool_id': self._subnet_ipv6_pd.subnetpool_id,
544+
}
545+
)
546+
self.assertFalse(self.network_client.set_tags.called)
547+
self.assertEqual(self.columns, columns)
548+
self.assertCountEqual(self.data_ipv6_pd, data)
549+
458550
def test_create_with_network_segment(self):
459551
# Mock SDK calls for this test.
460552
self._network.id = self._subnet.network_id

0 commit comments

Comments
 (0)