Problem: After removing a school server the kelvin api is not working anymore

Problem:

After removing a school server the kelvin api is not working anymore. No new data from the id-connector can be received.

In /var/log/univention/ucsschool-kelvin-rest-api/http.log you will find the following Traceback:

Traceback (most recent call last):
  File "/usr/lib/python3.8/site-packages/uvicorn/protocols/http/h11_impl.py", line 373, in run_asgi
    result = await app(self.scope, self.receive, self.send)
  File "/usr/lib/python3.8/site-packages/uvicorn/middleware/proxy_headers.py", line 75, in __call__
    return await self.app(scope, receive, send)
  File "/usr/lib/python3.8/site-packages/fastapi/applications.py", line 199, in __call__
    await super().__call__(scope, receive, send)
  File "/usr/lib/python3.8/site-packages/starlette/applications.py", line 111, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/usr/lib/python3.8/site-packages/starlette/middleware/errors.py", line 181, in __call__
    raise exc from None
  File "/usr/lib/python3.8/site-packages/starlette/middleware/errors.py", line 159, in __call__
    await self.app(scope, receive, _send)
  File "/usr/lib/python3.8/site-packages/starlette/exceptions.py", line 82, in __call__
    raise exc from None
  File "/usr/lib/python3.8/site-packages/starlette/exceptions.py", line 71, in __call__
    await self.app(scope, receive, sender)
  File "/usr/lib/python3.8/site-packages/starlette/routing.py", line 566, in __call__
    await route.handle(scope, receive, send)
  File "/usr/lib/python3.8/site-packages/starlette/routing.py", line 227, in handle
    await self.app(scope, receive, send)
  File "/usr/lib/python3.8/site-packages/starlette/routing.py", line 41, in app
    response = await func(request)
  File "/usr/lib/python3.8/site-packages/fastapi/routing.py", line 201, in app
    raw_response = await run_endpoint_function(
  File "/usr/lib/python3.8/site-packages/fastapi/routing.py", line 148, in run_endpoint_function
    return await dependant.call(**values)
  File "/kelvin/kelvin-api/ucsschool/kelvin/routers/school.py", line 233, in search
    return [await SchoolModel.from_lib_model(school, request, udm) for school in schools]
  File "/kelvin/kelvin-api/ucsschool/kelvin/routers/school.py", line 233, in <listcomp>
    return [await SchoolModel.from_lib_model(school, request, udm) for school in schools]
  File "/kelvin/kelvin-api/ucsschool/kelvin/routers/base.py", line 167, in from_lib_model
    kwargs = await cls._from_lib_model_kwargs(obj, request, udm)
  File "/kelvin/kelvin-api/ucsschool/kelvin/routers/school.py", line 91, in _from_lib_model_kwargs
    kwargs["class_share_file_server"] = await cls.computer_dn2name(udm, obj.class_share_file_server)
  File "/kelvin/kelvin-api/ucsschool/kelvin/routers/school.py", line 103, in computer_dn2name
    obj = await udm.obj_by_dn(dn)
  File "/usr/lib/python3.8/site-packages/udm_rest_client/udm.py", line 185, in obj_by_dn
    object_type = await self.session.get_object_type(dn)
  File "/usr/lib/python3.8/site-packages/udm_rest_client/base_http.py", line 330, in get_object_type
    body = await self.get_json(url, allow_redirects=True)
  File "/usr/lib/python3.8/site-packages/udm_rest_client/base_http.py", line 316, in get_json
    raise NoObject(
udm_rest_client.exceptions.NoObject: UDM REST API returned status 404, reason 'Not Found' for URL 'https://dc01.schein.qa/univention/udm/object/cn=slave-03,cn=dc,cn=computers,dc=schein,dc=qa'.
2021-12-17 12:43:13 INFO  172.17.42.1:54300 - "GET /ucsschool/kelvin/v1/schools/%2A HTTP/1.1" 404

Solution:

This happens if a educational server was removed via udm or UMC computers
Unfortunately the educational server could not be added again. The ou needs to be removed and added with the server again.

See Bug 54258

Mastodon