Skip to content
This repository was archived by the owner on Nov 19, 2018. It is now read-only.

Commit e4c4207

Browse files
committed
Add preemptible instances support
Launching a preemptible instance means passing an additional argument to novaclient, in this case "--preemptible". Change-Id: Ibb9b7ad6ec3e101f4560a16f3a9696fdead32e1f
1 parent 412b29b commit e4c4207

3 files changed

Lines changed: 65 additions & 1 deletion

File tree

doc/source/command-objects/server.rst

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ Create a new server
112112
[--config-drive <value>|True ]
113113
[--min <count>]
114114
[--max <count>]
115+
[--preemtible]
115116
[--wait]
116117
<server-name>
117118
@@ -183,6 +184,10 @@ Create a new server
183184

184185
Maximum number of servers to launch (default=1)
185186

187+
.. option:: --preemptible
188+
189+
Indicates that the requested instance is preemptible
190+
186191
.. option:: --wait
187192

188193
Wait for build to complete

openstackclient/compute/v2/server.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -423,6 +423,11 @@ def get_parser(self, prog_name):
423423
default=1,
424424
help=_('Maximum number of servers to launch (default=1)'),
425425
)
426+
parser.add_argument(
427+
'--preemptible',
428+
action='store_true',
429+
help=_('Indicates that the requested instance is preemptible'),
430+
)
426431
parser.add_argument(
427432
'--wait',
428433
action='store_true',
@@ -580,7 +585,8 @@ def take_action(self, parsed_args):
580585
block_device_mapping=block_device_mapping,
581586
nics=nics,
582587
scheduler_hints=hints,
583-
config_drive=config_drive)
588+
config_drive=config_drive,
589+
preemptible=parsed_args.preemptible)
584590

585591
LOG.debug('boot_args: %s', boot_args)
586592
LOG.debug('boot_kwargs: %s', boot_kwargs)

openstackclient/tests/compute/v2/test_server.py

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,56 @@ def test_server_create_minimal(self):
267267
nics=[],
268268
scheduler_hints={},
269269
config_drive=None,
270+
preemptible=False,
271+
)
272+
# ServerManager.create(name, image, flavor, **kwargs)
273+
self.servers_mock.create.assert_called_with(
274+
self.new_server.name,
275+
self.image,
276+
self.flavor,
277+
**kwargs
278+
)
279+
280+
self.assertEqual(self.columns, columns)
281+
self.assertEqual(self.datalist(), data)
282+
283+
def test_server_create_preemptible(self):
284+
arglist = [
285+
'--image', 'image1',
286+
'--flavor', 'flavor1',
287+
'--preemptible',
288+
self.new_server.name,
289+
]
290+
verifylist = [
291+
('image', 'image1'),
292+
('flavor', 'flavor1'),
293+
('config_drive', False),
294+
('preemptible', True),
295+
('server_name', self.new_server.name),
296+
]
297+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
298+
299+
# In base command class ShowOne in cliff, abstract method take_action()
300+
# returns a two-part tuple with a tuple of column names and a tuple of
301+
# data to be shown.
302+
columns, data = self.cmd.take_action(parsed_args)
303+
304+
# Set expected values
305+
kwargs = dict(
306+
meta=None,
307+
files={},
308+
reservation_id=None,
309+
min_count=1,
310+
max_count=1,
311+
security_groups=[],
312+
userdata=None,
313+
key_name=None,
314+
availability_zone=None,
315+
block_device_mapping={},
316+
nics=[],
317+
scheduler_hints={},
318+
config_drive=None,
319+
preemptible=True,
270320
)
271321
# ServerManager.create(name, image, flavor, **kwargs)
272322
self.servers_mock.create.assert_called_with(
@@ -354,6 +404,7 @@ def test_server_create_with_network(self):
354404
'port-id': 'port1_uuid'}],
355405
scheduler_hints={},
356406
config_drive=None,
407+
preemptible=False,
357408
)
358409
# ServerManager.create(name, image, flavor, **kwargs)
359410
self.servers_mock.create.assert_called_with(
@@ -413,6 +464,7 @@ def test_server_create_userdata(self, mock_open):
413464
nics=[],
414465
scheduler_hints={},
415466
config_drive=None,
467+
preemptible=False,
416468
)
417469
# ServerManager.create(name, image, flavor, **kwargs)
418470
self.servers_mock.create.assert_called_with(
@@ -466,6 +518,7 @@ def test_server_create_with_block_device_mapping(self):
466518
nics=[],
467519
scheduler_hints={},
468520
config_drive=None,
521+
preemptible=False,
469522
)
470523
# ServerManager.create(name, image, flavor, **kwargs)
471524
self.servers_mock.create.assert_called_with(

0 commit comments

Comments
 (0)