Skip to content

Commit 51a1ea6

Browse files
committed
Add API check for server_groups.create
The policies field has been replaced with the policy field since Nova API version 2.64[1] This commit adds a check to make sure the correct field is used. [1]https://docs.openstack.org/nova/latest/reference/api-microversion-history.html#id59 Change-Id: I06d3211937d822c26070b7f8ad757c365dcbb1bb Story: #2007822 Task: #40101
1 parent 8b7a2c8 commit 51a1ea6

2 files changed

Lines changed: 30 additions & 2 deletions

File tree

openstackclient/compute/v2/server_group.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import logging
1919

20+
from novaclient import api_versions
2021
from osc_lib.command import command
2122
from osc_lib import exceptions
2223
from osc_lib import utils
@@ -67,9 +68,13 @@ def get_parser(self, prog_name):
6768
def take_action(self, parsed_args):
6869
compute_client = self.app.client_manager.compute
6970
info = {}
71+
72+
policy_arg = {'policies': [parsed_args.policy]}
73+
if compute_client.api_version >= api_versions.APIVersion("2.64"):
74+
policy_arg = {'policy': parsed_args.policy}
7075
server_group = compute_client.server_groups.create(
71-
name=parsed_args.name,
72-
policies=[parsed_args.policy])
76+
name=parsed_args.name, **policy_arg)
77+
7378
info.update(server_group._info)
7479

7580
columns = _get_columns(info)

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

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
from unittest import mock
1717

18+
from novaclient import api_versions
1819
from osc_lib import exceptions
1920
from osc_lib import utils
2021

@@ -80,6 +81,28 @@ def test_server_group_create(self):
8081
self.assertEqual(self.columns, columns)
8182
self.assertEqual(self.data, data)
8283

84+
def test_server_group_create_v264(self):
85+
self.app.client_manager.compute.api_version = api_versions.APIVersion(
86+
'2.64')
87+
88+
arglist = [
89+
'--policy', 'soft-anti-affinity',
90+
'affinity_group',
91+
]
92+
verifylist = [
93+
('policy', 'soft-anti-affinity'),
94+
('name', 'affinity_group'),
95+
]
96+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
97+
columns, data = self.cmd.take_action(parsed_args)
98+
self.server_groups_mock.create.assert_called_once_with(
99+
name=parsed_args.name,
100+
policy=parsed_args.policy,
101+
)
102+
103+
self.assertEqual(self.columns, columns)
104+
self.assertEqual(self.data, data)
105+
83106

84107
class TestServerGroupDelete(TestServerGroup):
85108

0 commit comments

Comments
 (0)