Skip to content

Commit 7708106

Browse files
committed
compute: Add 'server create --server-group' option
Add an alias for requesting a server group. This is more syntactic sugar, though it comes with the added bonus of letting users request a server group by name instead of just ID. Change-Id: I3d9a7ce04a02fdf374b7a8082618eccdea8c3217 Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
1 parent 8b253cb commit 7708106

3 files changed

Lines changed: 33 additions & 6 deletions

File tree

openstackclient/compute/v2/server.py

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1335,10 +1335,19 @@ def get_parser(self, prog_name):
13351335
'(supported by --os-compute-api-version 2.74 or above)'
13361336
),
13371337
)
1338+
parser.add_argument(
1339+
'--server-group',
1340+
metavar='<server-group>',
1341+
help=_(
1342+
"Server group to create the server within "
1343+
"(this is an alias for '--hint group=<server-group-id>')"
1344+
),
1345+
)
13381346
parser.add_argument(
13391347
'--hint',
13401348
metavar='<key=value>',
13411349
action=parseractions.KeyValueAppendAction,
1350+
dest='hints',
13421351
default={},
13431352
help=_('Hints for the scheduler'),
13441353
)
@@ -1857,13 +1866,20 @@ def _match_image(image_api, wanted_properties):
18571866
security_group_names.append(sg['name'])
18581867

18591868
hints = {}
1860-
for key, values in parsed_args.hint.items():
1869+
for key, values in parsed_args.hints.items():
18611870
# only items with multiple values will result in a list
18621871
if len(values) == 1:
18631872
hints[key] = values[0]
18641873
else:
18651874
hints[key] = values
18661875

1876+
if parsed_args.server_group:
1877+
server_group_obj = utils.find_resource(
1878+
compute_client.server_groups,
1879+
parsed_args.server_group,
1880+
)
1881+
hints['group'] = server_group_obj.id
1882+
18671883
if isinstance(parsed_args.config_drive, bool):
18681884
# NOTE(stephenfin): The API doesn't accept False as a value :'(
18691885
config_drive = parsed_args.config_drive or None

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

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1447,6 +1447,8 @@ def test_server_create_with_options(self):
14471447
'a=b',
14481448
'--hint',
14491449
'a=c',
1450+
'--server-group',
1451+
'servergroup',
14501452
self.new_server.name,
14511453
]
14521454
verifylist = [
@@ -1455,22 +1457,26 @@ def test_server_create_with_options(self):
14551457
('key_name', 'keyname'),
14561458
('properties', {'Beta': 'b'}),
14571459
('security_group', ['securitygroup']),
1458-
('hint', {'a': ['b', 'c']}),
1460+
('hints', {'a': ['b', 'c']}),
1461+
('server_group', 'servergroup'),
14591462
('config_drive', True),
14601463
('password', 'passw0rd'),
14611464
('server_name', self.new_server.name),
14621465
]
14631466
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
14641467

1465-
# In base command class ShowOne in cliff, abstract method take_action()
1466-
# returns a two-part tuple with a tuple of column names and a tuple of
1467-
# data to be shown.
1468+
fake_server_group = compute_fakes.create_one_server_group()
1469+
self.compute_client.server_groups.get.return_value = fake_server_group
1470+
14681471
fake_sg = network_fakes.FakeSecurityGroup.create_security_groups()
14691472
mock_find_sg = network_fakes.FakeSecurityGroup.get_security_groups(
14701473
fake_sg
14711474
)
14721475
self.app.client_manager.network.find_security_group = mock_find_sg
14731476

1477+
# In base command class ShowOne in cliff, abstract method take_action()
1478+
# returns a two-part tuple with a tuple of column names and a tuple of
1479+
# data to be shown.
14741480
columns, data = self.cmd.take_action(parsed_args)
14751481

14761482
mock_find_sg.assert_called_once_with(
@@ -1490,7 +1496,7 @@ def test_server_create_with_options(self):
14901496
admin_pass='passw0rd',
14911497
block_device_mapping_v2=[],
14921498
nics=[],
1493-
scheduler_hints={'a': ['b', 'c']},
1499+
scheduler_hints={'a': ['b', 'c'], 'group': fake_server_group.id},
14941500
config_drive=True,
14951501
)
14961502
# ServerManager.create(name, image, flavor, **kwargs)
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
features:
3+
- |
4+
The ``server create`` command now accepts a new option, ``--server-group``,
5+
which is a shortcut for configuring the ``group`` scheduler hint.

0 commit comments

Comments
 (0)