Skip to content

Commit 0fa3c84

Browse files
Zuulopenstack-gerrit
authored andcommitted
Merge "Default --nic to 'auto' if creating a server with >= 2.37"
2 parents 02f492a + 1008544 commit 0fa3c84

4 files changed

Lines changed: 66 additions & 7 deletions

File tree

openstackclient/compute/v2/server.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -809,9 +809,14 @@ def _match_image(image_api, wanted_properties):
809809
raise exceptions.CommandError(msg)
810810
nics = nics[0]
811811
else:
812-
# Default to empty list if nothing was specified, let nova side to
813-
# decide the default behavior.
814-
nics = []
812+
# Compute API version >= 2.37 requires a value, so default to
813+
# 'auto' to maintain legacy behavior if a nic wasn't specified.
814+
if compute_client.api_version >= api_versions.APIVersion('2.37'):
815+
nics = 'auto'
816+
else:
817+
# Default to empty list if nothing was specified, let nova
818+
# side to decide the default behavior.
819+
nics = []
815820

816821
# Check security group exist and convert ID to name
817822
security_group_names = []

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

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -618,7 +618,9 @@ def test_server_create_with_empty_network_option_latest(self):
618618
server_name
619619
)
620620
except exceptions.CommandFailed as e:
621-
self.assertIn('nics are required after microversion 2.36',
622-
e.stderr)
623-
else:
624-
self.fail('CommandFailed should be raised.')
621+
# If we got here, it shouldn't be because a nics value wasn't
622+
# provided to the server; it is likely due to something else in
623+
# the functional tests like there being multiple available
624+
# networks and the test didn't specify a specific network.
625+
self.assertNotIn('nics are required after microversion 2.36',
626+
e.stderr)

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import uuid
1818

1919
import mock
20+
from novaclient import api_versions
2021

2122
from openstackclient.api import compute_v2
2223
from openstackclient.tests.unit import fakes
@@ -201,6 +202,8 @@ def __init__(self, **kwargs):
201202

202203
self.management_url = kwargs['endpoint']
203204

205+
self.api_version = api_versions.APIVersion('2.1')
206+
204207

205208
class TestComputev2(utils.TestCommand):
206209

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

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -845,6 +845,55 @@ def test_server_create_with_auto_network(self):
845845
self.assertEqual(self.columns, columns)
846846
self.assertEqual(self.datalist(), data)
847847

848+
def test_server_create_with_auto_network_default_v2_37(self):
849+
"""Tests creating a server without specifying --nic using 2.37."""
850+
arglist = [
851+
'--image', 'image1',
852+
'--flavor', 'flavor1',
853+
self.new_server.name,
854+
]
855+
verifylist = [
856+
('image', 'image1'),
857+
('flavor', 'flavor1'),
858+
('config_drive', False),
859+
('server_name', self.new_server.name),
860+
]
861+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
862+
863+
# Since check_parser doesn't handle compute global options like
864+
# --os-compute-api-version, we have to mock the construction of
865+
# the novaclient client object with our own APIVersion.
866+
with mock.patch.object(self.app.client_manager.compute, 'api_version',
867+
api_versions.APIVersion('2.37')):
868+
columns, data = self.cmd.take_action(parsed_args)
869+
870+
# Set expected values
871+
kwargs = dict(
872+
meta=None,
873+
files={},
874+
reservation_id=None,
875+
min_count=1,
876+
max_count=1,
877+
security_groups=[],
878+
userdata=None,
879+
key_name=None,
880+
availability_zone=None,
881+
block_device_mapping_v2=[],
882+
nics='auto',
883+
scheduler_hints={},
884+
config_drive=None,
885+
)
886+
# ServerManager.create(name, image, flavor, **kwargs)
887+
self.servers_mock.create.assert_called_with(
888+
self.new_server.name,
889+
self.image,
890+
self.flavor,
891+
**kwargs
892+
)
893+
894+
self.assertEqual(self.columns, columns)
895+
self.assertEqual(self.datalist(), data)
896+
848897
def test_server_create_with_none_network(self):
849898
arglist = [
850899
'--image', 'image1',

0 commit comments

Comments
 (0)