]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
python-common: Verify service spec is not None
authorSebastian Wagner <sebastian.wagner@suse.com>
Thu, 11 Feb 2021 11:23:56 +0000 (12:23 +0100)
committerSage Weil <sage@newdream.net>
Fri, 23 Apr 2021 12:24:14 +0000 (07:24 -0500)
Fixes: https://tracker.ceph.com/issues/48325
Signed-off-by: Sebastian Wagner <sebastian.wagner@suse.com>
(cherry picked from commit 518edfae7522ada8c74b413cef6e1ae1f08a244b)

src/python-common/ceph/deployment/service_spec.py
src/python-common/ceph/tests/test_drive_group.py

index 013e5522dcf806409069518f8f6b4e73191459f9..6e30e47aa7c289c673a9b123205d3d9e092a64c9 100644 (file)
@@ -531,6 +531,10 @@ class ServiceSpec(object):
         :param json_spec: A valid dict with ServiceSpec
         """
 
+        if not isinstance(json_spec, dict):
+            raise ServiceSpecValidationError(
+                f'Service Spec is not an (JSON or YAML) object. got "{str(json_spec)}"')
+
         c = json_spec.copy()
 
         # kludge to make `from_json` compatible to `Orchestrator.describe_service`
index 579b18975ce4d9c6d04d5b0ba763faebb7a25399..0fd162a99279227ddcd9101b495f51089f9aa953 100644 (file)
@@ -1,4 +1,6 @@
 # flake8: noqa
+import re
+
 import pytest
 import yaml
 
@@ -32,6 +34,10 @@ def test_DriveGroup(test_input):
 
 @pytest.mark.parametrize("match,test_input",
 [
+    (
+        re.escape('Service Spec is not an (JSON or YAML) object. got "None"'),
+        ''
+    ),
     (
         "Failed to validate Drive Group: OSD spec needs a `placement` key.",
         '{}'