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)
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')
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()