commit 781210bd598c3e0ee9bd6a7db5d25688b5fc0131 Author: Stephen Finucane Date: Wed Sep 16 10:59:49 2020 +0100 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) diff --git a/nova/api/openstack/compute/schemas/server_groups.py b/nova/api/openstack/compute/schemas/server_groups.py index c5724bd..102c6df 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 74cd7c0..3e85bfe 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 0000000..f87cc78 --- /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