]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
python-common: Validate characters in service_id for container names
authorMelissa Li <li.melissa.kun@gmail.com>
Tue, 16 Mar 2021 05:07:31 +0000 (01:07 -0400)
committerSage Weil <sage@newdream.net>
Sat, 20 Mar 2021 23:58:27 +0000 (18:58 -0500)
Service_ids need to be valid docker and podman container names.

Fixes: https://tracker.ceph.com/issues/46497
Signed-off-by: Melissa Li <li.melissa.kun@gmail.com>
(cherry picked from commit 8dd2bf85e759072b4af6546e93ef3768ef9b2db8)

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

index d44eb2d076b70222c598cb1e6ee1ebc494f5c68c..08d12523dbcf8c34437d663b6fbe8a98d6d0593a 100644 (file)
@@ -609,6 +609,9 @@ class ServiceSpec(object):
         if self.service_type in self.REQUIRES_SERVICE_ID:
             if not self.service_id:
                 raise ServiceSpecValidationError('Cannot add Service: id required')
+            if not re.match('^[a-zA-Z0-9_.-]+$', self.service_id):
+                raise ServiceSpecValidationError('Service id contains invalid characters, '
+                                                 'only [a-zA-Z0-9_.-] allowed')
         elif self.service_id:
             raise ServiceSpecValidationError(
                     f'Service of type \'{self.service_type}\' should not contain a service id')
index aa4e36dbb85ff6ae42a4741e1f30fabd8a42545c..035018958356e942e5fdb17e5e6e60704f93affe 100644 (file)
@@ -309,3 +309,18 @@ def test_service_name(s_type, s_id, s_name):
     spec = ServiceSpec.from_json(_get_dict_spec(s_type, s_id))
     spec.validate()
     assert spec.service_name() == s_name
+
+@pytest.mark.parametrize(
+    's_type,s_id',
+    [
+        ('mds', 's:id'),
+        ('rgw', '*s_id'),
+        ('nfs', 's/id'),
+        ('iscsi', 's@id'),
+        ('osd', 's;id'),
+    ])
+
+def test_service_id_raises_invalid_char(s_type, s_id):
+    with pytest.raises(ServiceSpecValidationError):
+        spec = ServiceSpec.from_json(_get_dict_spec(s_type, s_id))
+        spec.validate()