]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
python-common: RGW service_id might not contain a zone 35838/head
authorMichael Fritch <mfritch@suse.com>
Wed, 1 Jul 2020 14:27:02 +0000 (08:27 -0600)
committerMichael Fritch <mfritch@suse.com>
Wed, 1 Jul 2020 14:27:02 +0000 (08:27 -0600)
also adds missing RGWSpec.validate()

Fixes: https://tracker.ceph.com/issues/46268
Signed-off-by: Michael Fritch <mfritch@suse.com>
src/pybind/mgr/cephadm/tests/test_scheduling.py
src/python-common/ceph/deployment/service_spec.py

index 4c4d10dddf4573f64e8070266c36c97027db4566..806625934bf604b8457b53ab645c0e66d4074efd 100644 (file)
@@ -430,9 +430,16 @@ def test_node_assignment(service_type, placement, hosts, daemons, expected):
             return [HostSpec(h) for h in hosts]
         return hosts
 
+    service_id = None
+    if service_type == 'rgw':
+        service_id = 'realm.zone'
+
+    spec = ServiceSpec(service_type=service_type,
+                       service_id=service_id,
+                       placement=placement)
 
     hosts = HostAssignment(
-        spec=ServiceSpec(service_type, placement=placement),
+        spec=spec,
         get_hosts_func=get_hosts_func,
         get_daemons_func=lambda _: daemons).place()
     assert sorted([h.hostname for h in hosts]) == sorted(expected)
index 3c3c017d209dd41f90aa0a5e65b693fdda152a28..9111c75ad71e7b623aa6e41418984e08e8a925a6 100644 (file)
@@ -612,7 +612,8 @@ class RGWSpec(ServiceSpec):
         if service_id:
             a = service_id.split('.', 2)
             rgw_realm = a[0]
-            rgw_zone = a[1]
+            if len(a) > 1:
+                rgw_zone = a[1]
             if len(a) > 2:
                 subcluster = a[2]
         else:
@@ -650,6 +651,16 @@ class RGWSpec(ServiceSpec):
             ports.append(f"port={self.get_port()}")
         return f'beast {" ".join(ports)}'
 
+    def validate(self):
+        super(RGWSpec, self).validate()
+
+        if not self.rgw_realm:
+            raise ServiceSpecValidationError(
+                'Cannot add RGW: No realm specified')
+        if not self.rgw_zone:
+            raise ServiceSpecValidationError(
+                'Cannot add RGW: No zone specified')
+
 
 yaml.add_representer(RGWSpec, ServiceSpec.yaml_representer)