Cause it never actually worked as expected.
Remove duplicated service_id check, cause it's already
verified by parent method.
Fixes: https://tracker.ceph.com/issues/46253
Signed-off-by: Sebastian Wagner <sewagner@redhat.com>
def test_apply():
to = _TestOrchestrator('', 0, 0)
completion = to.apply([
- ServiceSpec(service_type='nfs'),
- ServiceSpec(service_type='nfs'),
- ServiceSpec(service_type='nfs'),
+ ServiceSpec(service_type='nfs', service_id='foo'),
+ ServiceSpec(service_type='nfs', service_id='foo'),
+ ServiceSpec(service_type='nfs', service_id='foo'),
])
- res = '<NFSServiceSpec for service_name=nfs>'
+ res = '<NFSServiceSpec for service_name=nfs.foo>'
assert completion.result == [res, res, res]
if it was raised in a different mgr module.
"""
- def __init__(self, name: str, msg: str):
+ def __init__(self, name: Optional[str], msg: str):
+ name = name or "<unnamed>"
super(DriveGroupValidationError, self).__init__(
f'Failed to validate OSD spec "{name}": {msg}')
args['service_type'] = json_drive_group.pop('service_type', 'osd')
- # service_id was not required in early octopus.
- args['service_id'] = json_drive_group.pop('service_id', '')
- s_id = args['service_id']
+ s_id = args.get('service_id', '<unnamed>')
try:
args['placement'] = PlacementSpec.from_json(json_drive_group.pop('placement'))
except KeyError:
# type: () -> None
super(DriveGroupSpec, self).validate()
- if not self.service_id:
- raise DriveGroupValidationError('', 'service_id is required')
-
if not isinstance(self.placement.host_pattern, str) and \
self.placement.host_pattern is not None:
raise DriveGroupValidationError(self.service_id, 'host_pattern must be of type string')
KNOWN_SERVICE_TYPES = 'alertmanager crash grafana iscsi mds mgr mon nfs ' \
'node-exporter osd prometheus rbd-mirror rgw agent ' \
'container ingress cephfs-mirror'.split()
- REQUIRES_SERVICE_ID = 'iscsi mds nfs osd rgw container ingress '.split()
+ REQUIRES_SERVICE_ID = 'iscsi mds nfs rgw container ingress '.split()
MANAGED_CONFIG_OPTIONS = [
'mds_join_fs',
]
#: ``container``, ``ingress``
self.service_id = None
- if self.service_type in self.REQUIRES_SERVICE_ID:
+ if self.service_type in self.REQUIRES_SERVICE_ID or self.service_type == 'osd':
self.service_id = service_id
#: If set to ``true``, the orchestrator will not deploy nor remove
if not self.service_type:
raise SpecValidationError('Cannot add Service: type required')
- if self.service_type in self.REQUIRES_SERVICE_ID:
- if not self.service_id:
+ if self.service_type != 'osd':
+ if self.service_type in self.REQUIRES_SERVICE_ID and not self.service_id:
raise SpecValidationError('Cannot add Service: id required')
+ if self.service_type not in self.REQUIRES_SERVICE_ID and self.service_id:
+ raise SpecValidationError(
+ f'Service of type \'{self.service_type}\' should not contain a service id')
+
+ if self.service_id:
if not re.match('^[a-zA-Z0-9_.-]+$', self.service_id):
raise SpecValidationError('Service id contains invalid characters, '
'only [a-zA-Z0-9_.-] allowed')
- elif self.service_id:
- raise SpecValidationError(
- f'Service of type \'{self.service_type}\' should not contain a service id')
if self.placement is not None:
self.placement.validate()
''
),
(
- "Failed to validate Drive Group: OSD spec needs a `placement` key.",
+ 'Failed to validate OSD spec "": `placement` key required',
+ """data_devices:
+ all: True
+"""
+ ),
+ (
'Failed to validate OSD spec "mydg.data_devices": device selection cannot be empty', """
service_type: osd
service_id: mydg