From 1634d3f59ace0206131992e31ee2d4b64123d7e8 Mon Sep 17 00:00:00 2001 From: Stephen Finucane Date: Wed, 16 Sep 2020 10:59:49 +0100 Subject: [PATCH] api: Set min, maxItems for server_group.policies field As noted inline, the 'policies' field may be a list but it expects one of two items. Change-Id: I34c68df1e6330dab1524aa0abec733610211a407 Signed-off-by: Stephen Finucane Closes-Bug: #1894966 (cherry picked from commit 32c43fc8017ee89d4e6cdf79086d87735a00f0c0) (cherry picked from commit 781210bd598c3e0ee9bd6a7db5d25688b5fc0131) --- .../openstack/compute/schemas/server_groups.py | 18 +++++++++++------- .../functional/regressions/test_bug_1894966.py | 3 +-- .../notes/bug-1894966-d25c12b1320cb910.yaml | 10 ++++++++++ 3 files changed, 22 insertions(+), 9 deletions(-) create mode 100644 releasenotes/notes/bug-1894966-d25c12b1320cb910.yaml diff --git a/nova/api/openstack/compute/schemas/server_groups.py b/nova/api/openstack/compute/schemas/server_groups.py index c5724bd68734..102c6df869ec 100644 --- a/nova/api/openstack/compute/schemas/server_groups.py +++ b/nova/api/openstack/compute/schemas/server_groups.py @@ -11,6 +11,7 @@ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. + import copy from nova.api.validation import parameter_types @@ -27,15 +28,18 @@ create = { 'name': parameter_types.name, 'policies': { # This allows only a single item and it must be one of the - # enumerated values. So this is really just a single string - # value, but for legacy reasons is an array. We could - # probably change the type from array to string with a - # microversion at some point but it's very low priority. + # enumerated values. It's changed to a single string value + # in 2.64. 'type': 'array', - 'items': [{ - 'type': 'string', - 'enum': ['anti-affinity', 'affinity']}], + 'items': [ + { + 'type': 'string', + 'enum': ['anti-affinity', 'affinity'], + }, + ], 'uniqueItems': True, + 'minItems': 1, + 'maxItems': 1, 'additionalItems': False, } }, diff --git a/nova/tests/functional/regressions/test_bug_1894966.py b/nova/tests/functional/regressions/test_bug_1894966.py index 72173b82559e..e7e406908485 100644 --- a/nova/tests/functional/regressions/test_bug_1894966.py +++ b/nova/tests/functional/regressions/test_bug_1894966.py @@ -37,5 +37,4 @@ class TestCreateServerGroupWithEmptyPolicies( client.OpenStackApiException, self.api.post_server_groups, {'name': 'test group', 'policies': []}) - # FIXME(stephenfin): This should not be a 500 error - self.assertEqual(500, exc.response.status_code) + self.assertEqual(400, exc.response.status_code) diff --git a/releasenotes/notes/bug-1894966-d25c12b1320cb910.yaml b/releasenotes/notes/bug-1894966-d25c12b1320cb910.yaml new file mode 100644 index 000000000000..f87cc7806da3 --- /dev/null +++ b/releasenotes/notes/bug-1894966-d25c12b1320cb910.yaml @@ -0,0 +1,10 @@ +--- +fixes: + - | + Resolved an issue whereby providing an empty list for the ``policies`` + field in the request body of the ``POST /os-server-groups`` API would + result in a server error. This only affects the 2.1 to 2.63 microversions, + as the 2.64 microversion replaces the ``policies`` list field with a + ``policy`` string field. See `bug #1894966`__ for more information. + + .. __: https://bugs.launchpad.net/nova/+bug/1894966