Skip to content

Commit aec9363

Browse files
Jenkinsopenstack-gerrit
authored andcommitted
Merge "Fix reservation_id not supported by Nova API"
2 parents 9b30965 + da44174 commit aec9363

File tree

4 files changed

+35
-7
lines changed

4 files changed

+35
-7
lines changed

novaclient/tests/unit/fixture_data/servers.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -417,6 +417,9 @@ def post_servers(self, request, context):
417417
if 'personality' in body['server']:
418418
for pfile in body['server']['personality']:
419419
fakes.assert_has_keys(pfile, required=['path', 'contents'])
420+
if ('return_reservation_id' in body['server'].keys() and
421+
body['server']['return_reservation_id']):
422+
return {'reservation_id': 'r-3fhpjulh'}
420423
if body['server']['name'] == 'some-bad-server':
421424
body = self.server_1235
422425
else:

novaclient/tests/unit/v2/test_servers.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -390,6 +390,17 @@ def test_create_server_disk_config_auto(self):
390390
def test_create_server_disk_config_manual(self):
391391
self._create_disk_config('MANUAL')
392392

393+
def test_create_server_return_reservation_id(self):
394+
s = self.cs.servers.create(
395+
name="My server",
396+
image=1,
397+
flavor=1,
398+
reservation_id=True,
399+
nics=self._get_server_create_default_nics()
400+
)
401+
self.assert_request_id(s, fakes.FAKE_REQUEST_ID_LIST)
402+
self.assert_called('POST', '/servers')
403+
393404
def test_update_server(self):
394405
s = self.cs.servers.get(1234)
395406

novaclient/v2/servers.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -657,7 +657,7 @@ class ServerManager(base.BootingManagerWithFind):
657657

658658
def _boot(self, resource_url, response_key, name, image, flavor,
659659
meta=None, files=None, userdata=None,
660-
reservation_id=None, return_raw=False, min_count=None,
660+
reservation_id=False, return_raw=False, min_count=None,
661661
max_count=None, security_groups=None, key_name=None,
662662
availability_zone=None, block_device_mapping=None,
663663
block_device_mapping_v2=None, nics=None, scheduler_hints=None,
@@ -695,7 +695,8 @@ def _boot(self, resource_url, response_key, name, image, flavor,
695695
if meta:
696696
body["server"]["metadata"] = meta
697697
if reservation_id:
698-
body["server"]["reservation_id"] = reservation_id
698+
body["server"]["return_reservation_id"] = reservation_id
699+
return_raw = True
699700
if key_name:
700701
body["server"]["key_name"] = key_name
701702
if scheduler_hints:
@@ -1278,7 +1279,7 @@ def _validate_create_nics(self, nics):
12781279
type(nics))
12791280

12801281
def create(self, name, image, flavor, meta=None, files=None,
1281-
reservation_id=None, min_count=None,
1282+
reservation_id=False, min_count=None,
12821283
max_count=None, security_groups=None, userdata=None,
12831284
key_name=None, availability_zone=None,
12841285
block_device_mapping=None, block_device_mapping_v2=None,
@@ -1300,7 +1301,8 @@ def create(self, name, image, flavor, meta=None, files=None,
13001301
are the file contents (either as a string or as a
13011302
file-like object). A maximum of five entries is allowed,
13021303
and each file must be 10k or less.
1303-
:param reservation_id: a UUID for the set of servers being requested.
1304+
:param reservation_id: return a reservation_id for the set of
1305+
servers being requested, boolean.
13041306
:param min_count: (optional extension) The minimum number of
13051307
servers to launch.
13061308
:param max_count: (optional extension) The maximum number of
@@ -1399,7 +1401,7 @@ def create(self, name, image, flavor, meta=None, files=None,
13991401
if nics:
14001402
boot_kwargs['nics'] = nics
14011403

1402-
response_key = "server"
1404+
response_key = "server" if not reservation_id else "reservation_id"
14031405
return self._boot(resource_url, response_key, *boot_args,
14041406
**boot_kwargs)
14051407

novaclient/v2/shell.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -525,7 +525,8 @@ def _boot(cs, args):
525525
config_drive=config_drive,
526526
admin_pass=args.admin_pass,
527527
access_ip_v4=args.access_ip_v4,
528-
access_ip_v6=args.access_ip_v6)
528+
access_ip_v6=args.access_ip_v6,
529+
reservation_id=args.return_reservation_id)
529530

530531
if 'description' in args:
531532
boot_kwargs["description"] = args.description
@@ -887,6 +888,12 @@ def _boot(cs, args):
887888
help=_('Tags for the server.'
888889
'Tags must be separated by commas: --tags <tag1,tag2>'),
889890
start_version="2.52")
891+
@utils.arg(
892+
'--return-reservation-id',
893+
dest='return_reservation_id',
894+
action="store_true",
895+
default=False,
896+
help=_("Return a reservation id bound to created servers."))
890897
def do_boot(cs, args):
891898
"""Boot a new server."""
892899
boot_args, boot_kwargs = _boot(cs, args)
@@ -895,7 +902,12 @@ def do_boot(cs, args):
895902
boot_kwargs.update(extra_boot_kwargs)
896903

897904
server = cs.servers.create(*boot_args, **boot_kwargs)
898-
_print_server(cs, args, server)
905+
if boot_kwargs['reservation_id']:
906+
new_server = {'reservation_id': server}
907+
utils.print_dict(new_server)
908+
return
909+
else:
910+
_print_server(cs, args, server)
899911

900912
if args.poll:
901913
_poll_for_status(cs.servers.get, server.id, 'building', ['active'])

0 commit comments

Comments
 (0)