]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/orchestrator: validate config options at apply time
authorSage Weil <sage@newdream.net>
Tue, 23 Feb 2021 21:51:09 +0000 (16:51 -0500)
committerSebastian Wagner <sebastian.wagner@suse.com>
Tue, 9 Mar 2021 14:29:32 +0000 (15:29 +0100)
Make sure config options are valid/exist.

Signed-off-by: Sage Weil <sage@newdream.net>
(cherry picked from commit deb9eae5b19e9d1ac95a183c6211a9f8ec25833c)

src/pybind/mgr/orchestrator/module.py

index ed1f75da50a368ffad900886d20c38a0419bcad0..85dd8749c04971a4da6b8ec2d2fb7efcf79d357f 100644 (file)
@@ -10,7 +10,8 @@ from prettytable import PrettyTable
 
 from ceph.deployment.inventory import Device
 from ceph.deployment.drive_group import DriveGroupSpec, DeviceSelection
-from ceph.deployment.service_spec import PlacementSpec, ServiceSpec
+from ceph.deployment.service_spec import PlacementSpec, ServiceSpec, \
+    ServiceSpecValidationError
 from ceph.utils import datetime_now
 
 from mgr_util import to_pretty_timedelta, format_dimless
@@ -1062,6 +1063,15 @@ Usage:
             specs: List[Union[ServiceSpec, HostSpec]] = []
             for s in content:
                 spec = json_to_generic_spec(s)
+
+                # validate the config (we need MgrModule for that)
+                if isinstance(spec, ServiceSpec) and spec.config:
+                    for k, v in spec.config.items():
+                        try:
+                            self.get_foreign_ceph_option('mon', k)
+                        except KeyError:
+                            raise ServiceSpecValidationError(f'Invalid config option {k} in spec')
+
                 if dry_run and not isinstance(spec, HostSpec):
                     spec.preview_only = dry_run
                 specs.append(spec)