Merge "Default --nic to 'auto' if creating a server with >= 2.37"

This commit is contained in:
Zuul 2018-10-26 03:20:17 +00:00 committed by Gerrit Code Review
commit 0fa3c84b4f
4 changed files with 66 additions and 7 deletions

View File

@ -809,9 +809,14 @@ class CreateServer(command.ShowOne):
raise exceptions.CommandError(msg) raise exceptions.CommandError(msg)
nics = nics[0] nics = nics[0]
else: else:
# Default to empty list if nothing was specified, let nova side to # Compute API version >= 2.37 requires a value, so default to
# decide the default behavior. # 'auto' to maintain legacy behavior if a nic wasn't specified.
nics = [] if compute_client.api_version >= api_versions.APIVersion('2.37'):
nics = 'auto'
else:
# Default to empty list if nothing was specified, let nova
# side to decide the default behavior.
nics = []
# Check security group exist and convert ID to name # Check security group exist and convert ID to name
security_group_names = [] security_group_names = []

View File

@ -618,7 +618,9 @@ class ServerTests(common.ComputeTestCase):
server_name server_name
) )
except exceptions.CommandFailed as e: except exceptions.CommandFailed as e:
self.assertIn('nics are required after microversion 2.36', # If we got here, it shouldn't be because a nics value wasn't
e.stderr) # provided to the server; it is likely due to something else in
else: # the functional tests like there being multiple available
self.fail('CommandFailed should be raised.') # networks and the test didn't specify a specific network.
self.assertNotIn('nics are required after microversion 2.36',
e.stderr)

View File

@ -17,6 +17,7 @@ import copy
import uuid import uuid
import mock import mock
from novaclient import api_versions
from openstackclient.api import compute_v2 from openstackclient.api import compute_v2
from openstackclient.tests.unit import fakes from openstackclient.tests.unit import fakes
@ -201,6 +202,8 @@ class FakeComputev2Client(object):
self.management_url = kwargs['endpoint'] self.management_url = kwargs['endpoint']
self.api_version = api_versions.APIVersion('2.1')
class TestComputev2(utils.TestCommand): class TestComputev2(utils.TestCommand):

View File

@ -845,6 +845,55 @@ class TestServerCreate(TestServer):
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
self.assertEqual(self.datalist(), data) self.assertEqual(self.datalist(), data)
def test_server_create_with_auto_network_default_v2_37(self):
"""Tests creating a server without specifying --nic using 2.37."""
arglist = [
'--image', 'image1',
'--flavor', 'flavor1',
self.new_server.name,
]
verifylist = [
('image', 'image1'),
('flavor', 'flavor1'),
('config_drive', False),
('server_name', self.new_server.name),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
# Since check_parser doesn't handle compute global options like
# --os-compute-api-version, we have to mock the construction of
# the novaclient client object with our own APIVersion.
with mock.patch.object(self.app.client_manager.compute, 'api_version',
api_versions.APIVersion('2.37')):
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
kwargs = dict(
meta=None,
files={},
reservation_id=None,
min_count=1,
max_count=1,
security_groups=[],
userdata=None,
key_name=None,
availability_zone=None,
block_device_mapping_v2=[],
nics='auto',
scheduler_hints={},
config_drive=None,
)
# ServerManager.create(name, image, flavor, **kwargs)
self.servers_mock.create.assert_called_with(
self.new_server.name,
self.image,
self.flavor,
**kwargs
)
self.assertEqual(self.columns, columns)
self.assertEqual(self.datalist(), data)
def test_server_create_with_none_network(self): def test_server_create_with_none_network(self):
arglist = [ arglist = [
'--image', 'image1', '--image', 'image1',