Skip to content

Commit d09aef5

Browse files
Zuulopenstack-gerrit
authored andcommitted
Merge "compute: Add missing microversion check for networks"
2 parents 16f18d4 + ffb6911 commit d09aef5

2 files changed

Lines changed: 91 additions & 17 deletions

File tree

openstackclient/compute/v2/server.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1615,6 +1615,14 @@ def _match_image(image_api, wanted_properties):
16151615
)
16161616
raise exceptions.CommandError(msg)
16171617

1618+
if compute_client.api_version < api_versions.APIVersion('2.37'):
1619+
msg = _(
1620+
'--os-compute-api-version 2.37 or greater is '
1621+
'required to support explicit auto-allocation of a '
1622+
'network or to disable network allocation'
1623+
)
1624+
raise exceptions.CommandError(msg)
1625+
16181626
nics = nics[0]
16191627
else:
16201628
for nic in nics:

openstackclient/tests/unit/compute/v2/test_server.py

Lines changed: 83 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1926,6 +1926,10 @@ def test_server_create_with_network_tag_pre_v243(self):
19261926
exceptions.CommandError, self.cmd.take_action, parsed_args)
19271927

19281928
def _test_server_create_with_auto_network(self, arglist):
1929+
# requires API microversion 2.37 or later
1930+
self.app.client_manager.compute.api_version = api_versions.APIVersion(
1931+
'2.37')
1932+
19291933
verifylist = [
19301934
('image', 'image1'),
19311935
('flavor', 'flavor1'),
@@ -1986,8 +1990,45 @@ def test_server_create_with_auto_network(self):
19861990
]
19871991
self._test_server_create_with_auto_network(arglist)
19881992

1993+
def test_server_create_with_auto_network_pre_v237(self):
1994+
# use an API microversion that's too old
1995+
self.app.client_manager.compute.api_version = api_versions.APIVersion(
1996+
'2.36')
1997+
1998+
arglist = [
1999+
'--image', 'image1',
2000+
'--flavor', 'flavor1',
2001+
'--nic', 'auto',
2002+
self.new_server.name,
2003+
]
2004+
verifylist = [
2005+
('image', 'image1'),
2006+
('flavor', 'flavor1'),
2007+
('nics', ['auto']),
2008+
('config_drive', False),
2009+
('server_name', self.new_server.name),
2010+
]
2011+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
2012+
2013+
exc = self.assertRaises(
2014+
exceptions.CommandError,
2015+
self.cmd.take_action,
2016+
parsed_args,
2017+
)
2018+
self.assertIn(
2019+
'--os-compute-api-version 2.37 or greater is required to support '
2020+
'explicit auto-allocation of a network or to disable network '
2021+
'allocation',
2022+
str(exc),
2023+
)
2024+
self.assertNotCalled(self.servers_mock.create)
2025+
19892026
def test_server_create_with_auto_network_default_v2_37(self):
19902027
"""Tests creating a server without specifying --nic using 2.37."""
2028+
# requires API microversion 2.37 or later
2029+
self.app.client_manager.compute.api_version = api_versions.APIVersion(
2030+
'2.37')
2031+
19912032
arglist = [
19922033
'--image', 'image1',
19932034
'--flavor', 'flavor1',
@@ -2001,12 +2042,7 @@ def test_server_create_with_auto_network_default_v2_37(self):
20012042
]
20022043
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
20032044

2004-
# Since check_parser doesn't handle compute global options like
2005-
# --os-compute-api-version, we have to mock the construction of
2006-
# the novaclient client object with our own APIVersion.
2007-
with mock.patch.object(self.app.client_manager.compute, 'api_version',
2008-
api_versions.APIVersion('2.37')):
2009-
columns, data = self.cmd.take_action(parsed_args)
2045+
columns, data = self.cmd.take_action(parsed_args)
20102046

20112047
# Set expected values
20122048
kwargs = dict(
@@ -2037,6 +2073,10 @@ def test_server_create_with_auto_network_default_v2_37(self):
20372073
self.assertEqual(self.datalist(), data)
20382074

20392075
def _test_server_create_with_none_network(self, arglist):
2076+
# requires API microversion 2.37 or later
2077+
self.app.client_manager.compute.api_version = api_versions.APIVersion(
2078+
'2.37')
2079+
20402080
verifylist = [
20412081
('image', 'image1'),
20422082
('flavor', 'flavor1'),
@@ -2097,6 +2137,40 @@ def test_server_create_with_none_network(self):
20972137
]
20982138
self._test_server_create_with_none_network(arglist)
20992139

2140+
def test_server_create_with_none_network_pre_v237(self):
2141+
# use an API microversion that's too old
2142+
self.app.client_manager.compute.api_version = api_versions.APIVersion(
2143+
'2.36')
2144+
2145+
arglist = [
2146+
'--image', 'image1',
2147+
'--flavor', 'flavor1',
2148+
'--nic', 'none',
2149+
self.new_server.name,
2150+
]
2151+
2152+
verifylist = [
2153+
('image', 'image1'),
2154+
('flavor', 'flavor1'),
2155+
('nics', ['none']),
2156+
('config_drive', False),
2157+
('server_name', self.new_server.name),
2158+
]
2159+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
2160+
2161+
exc = self.assertRaises(
2162+
exceptions.CommandError,
2163+
self.cmd.take_action,
2164+
parsed_args,
2165+
)
2166+
self.assertIn(
2167+
'--os-compute-api-version 2.37 or greater is required to support '
2168+
'explicit auto-allocation of a network or to disable network '
2169+
'allocation',
2170+
str(exc),
2171+
)
2172+
self.assertNotCalled(self.servers_mock.create)
2173+
21002174
def test_server_create_with_conflict_network_options(self):
21012175
arglist = [
21022176
'--image', 'image1',
@@ -3227,13 +3301,11 @@ def test_server_create_image_property(self):
32273301
arglist = [
32283302
'--image-property', 'hypervisor_type=qemu',
32293303
'--flavor', 'flavor1',
3230-
'--nic', 'none',
32313304
self.new_server.name,
32323305
]
32333306
verifylist = [
32343307
('image_properties', {'hypervisor_type': 'qemu'}),
32353308
('flavor', 'flavor1'),
3236-
('nics', ['none']),
32373309
('config_drive', False),
32383310
('server_name', self.new_server.name),
32393311
]
@@ -3261,7 +3333,7 @@ def test_server_create_image_property(self):
32613333
availability_zone=None,
32623334
admin_pass=None,
32633335
block_device_mapping_v2=[],
3264-
nics='none',
3336+
nics=[],
32653337
meta=None,
32663338
scheduler_hints={},
32673339
config_drive=None,
@@ -3282,14 +3354,12 @@ def test_server_create_image_property_multi(self):
32823354
'--image-property', 'hypervisor_type=qemu',
32833355
'--image-property', 'hw_disk_bus=ide',
32843356
'--flavor', 'flavor1',
3285-
'--nic', 'none',
32863357
self.new_server.name,
32873358
]
32883359
verifylist = [
32893360
('image_properties', {'hypervisor_type': 'qemu',
32903361
'hw_disk_bus': 'ide'}),
32913362
('flavor', 'flavor1'),
3292-
('nics', ['none']),
32933363
('config_drive', False),
32943364
('server_name', self.new_server.name),
32953365
]
@@ -3317,7 +3387,7 @@ def test_server_create_image_property_multi(self):
33173387
availability_zone=None,
33183388
admin_pass=None,
33193389
block_device_mapping_v2=[],
3320-
nics='none',
3390+
nics=[],
33213391
meta=None,
33223392
scheduler_hints={},
33233393
config_drive=None,
@@ -3338,14 +3408,12 @@ def test_server_create_image_property_missed(self):
33383408
'--image-property', 'hypervisor_type=qemu',
33393409
'--image-property', 'hw_disk_bus=virtio',
33403410
'--flavor', 'flavor1',
3341-
'--nic', 'none',
33423411
self.new_server.name,
33433412
]
33443413
verifylist = [
33453414
('image_properties', {'hypervisor_type': 'qemu',
33463415
'hw_disk_bus': 'virtio'}),
33473416
('flavor', 'flavor1'),
3348-
('nics', ['none']),
33493417
('config_drive', False),
33503418
('server_name', self.new_server.name),
33513419
]
@@ -3369,15 +3437,13 @@ def test_server_create_image_property_with_image_list(self):
33693437
'--image-property',
33703438
'owner_specified.openstack.object=image/cirros',
33713439
'--flavor', 'flavor1',
3372-
'--nic', 'none',
33733440
self.new_server.name,
33743441
]
33753442

33763443
verifylist = [
33773444
('image_properties',
33783445
{'owner_specified.openstack.object': 'image/cirros'}),
33793446
('flavor', 'flavor1'),
3380-
('nics', ['none']),
33813447
('server_name', self.new_server.name),
33823448
]
33833449
# create a image_info as the side_effect of the fake image_list()
@@ -3407,7 +3473,7 @@ def test_server_create_image_property_with_image_list(self):
34073473
availability_zone=None,
34083474
admin_pass=None,
34093475
block_device_mapping_v2=[],
3410-
nics='none',
3476+
nics=[],
34113477
meta=None,
34123478
scheduler_hints={},
34133479
config_drive=None,

0 commit comments

Comments
 (0)