"""
KNOWN_SERVICE_TYPES = 'alertmanager crash grafana iscsi mds mgr mon nfs ' \
'node-exporter osd prometheus rbd-mirror rgw'.split()
+ REQUIRES_SERVICE_ID = 'iscsi mds nfs osd rgw'.split()
@classmethod
def _cls(cls, service_type):
assert service_type in ServiceSpec.KNOWN_SERVICE_TYPES, service_type
self.service_type = service_type
- self.service_id = service_id
+ self.service_id = None
+ if self.service_type in self.REQUIRES_SERVICE_ID:
+ self.service_id = service_id
self.unmanaged = unmanaged
self.preview_only = preview_only
if not self.service_type:
raise ServiceSpecValidationError('Cannot add Service: type required')
- if self.service_type in ['mds', 'rgw', 'nfs', 'iscsi'] and not self.service_id:
- raise ServiceSpecValidationError('Cannot add Service: id required')
+ if self.service_type in self.REQUIRES_SERVICE_ID:
+ if not self.service_id:
+ raise ServiceSpecValidationError('Cannot add Service: id required')
+ elif self.service_id:
+ raise ServiceSpecValidationError(
+ f'Service of type \'{self.service_type}\' should not contain a service id')
if self.placement is not None:
self.placement.validate()
HostPlacementSpec.parse(test_input)
-@pytest.mark.parametrize(
- "s_type,o_spec,s_id",
- [
- ("mgr", ServiceSpec, 'test'),
- ("mon", ServiceSpec, 'test'),
- ("mds", ServiceSpec, 'test'),
- ("rgw", RGWSpec, 'realm.zone'),
- ("nfs", NFSServiceSpec, 'test'),
- ("iscsi", IscsiServiceSpec, 'test'),
- ("osd", DriveGroupSpec, 'test'),
- ])
-def test_servicespec_map_test(s_type, o_spec, s_id):
+def _get_dict_spec(s_type, s_id):
dict_spec = {
"service_id": s_id,
"service_type": s_type,
'all': True
}
}
- spec = ServiceSpec.from_json(dict_spec)
+ elif s_type == 'rgw':
+ dict_spec['rgw_realm'] = 'realm'
+ dict_spec['rgw_zone'] = 'zone'
+
+ return dict_spec
+
+
+@pytest.mark.parametrize(
+ "s_type,o_spec,s_id",
+ [
+ ("mgr", ServiceSpec, 'test'),
+ ("mon", ServiceSpec, 'test'),
+ ("mds", ServiceSpec, 'test'),
+ ("rgw", RGWSpec, 'realm.zone'),
+ ("nfs", NFSServiceSpec, 'test'),
+ ("iscsi", IscsiServiceSpec, 'test'),
+ ("osd", DriveGroupSpec, 'test'),
+ ])
+def test_servicespec_map_test(s_type, o_spec, s_id):
+ spec = ServiceSpec.from_json(_get_dict_spec(s_type, s_id))
assert isinstance(spec, o_spec)
assert isinstance(spec.placement, PlacementSpec)
assert isinstance(spec.placement.hosts[0], HostPlacementSpec)
service_type='mon',
service_id='foo'
),
- False
+ True
),
# Add service_type='mgr'
(
eq: bool):
assert (spec1 == spec2) is eq
+
+@pytest.mark.parametrize(
+ "s_type,s_id,s_name",
+ [
+ ('mgr', 's_id', 'mgr'),
+ ('mon', 's_id', 'mon'),
+ ('mds', 's_id', 'mds.s_id'),
+ ('rgw', 's_id', 'rgw.s_id'),
+ ('nfs', 's_id', 'nfs.s_id'),
+ ('iscsi', 's_id', 'iscsi.s_id'),
+ ('osd', 's_id', 'osd.s_id'),
+ ])
+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