Версия пакета: foreman-3.19.1-alt1.2 Предусловия: Настроенный Foreman. С самого же сервера Foreman отправить информацию о системе с помощью: `# puppet agent -t` Шаги воспроизведения: 1) # curl -k -u admin:password https://$(hostname -f):2345/api/v2/hosts 2) # curl -k -u admin:password https://$(hostname -f):2345/api/v2/hosts/1 3) # curl -k -u admin:password https://$(hostname -f):2345/api/v2/hosts?thin=true 4) В WebUI Foreman перейти на Hosts → All Hosts/Узлы → Все узлы Фактический результат: ``` # curl -k -u admin:password https://$(hostname -f):2345/api/v2/hosts { "error": {"message":"wrong argument type nil (expected String)"} } # curl -k -u admin:password https://$(hostname -f):2345/api/v2/hosts/1 { "error": {"message":"wrong argument type nil (expected String)"} } # curl -k -u admin:password https://$(hostname -f):2345/api/v2/hosts?thin=true { "total": 1, "subtotal": 1, "page": 1, "per_page": 20, "search": null, "sort": { "by": null, "order": null }, "results": [{"id":1,"name":"foreman-test"}] } В WebUI на странице с хостами ошибка "Request failed with status code 500" ``` Причина: Ошибка находится в /usr/lib/foreman/app/views/api/v2/hosts/main.json.rabl В список сериализуемых атрибутов входят: ``` :creator_id, :creator ``` При этом `creator` является association с `User` и в зависимости от данных возвращает объект `User` либо `nil`, а не гарантированное строковое значение. Проверенное исправление: Не передавать association `creator` как обычный attribute: ``` -attributes ..., :creator_id, :creator, ... +attributes ..., :creator_id, ... ``` и сериализовать его явно: ``` node :creator do |host| host.creator&.to_label end ``` После изменения успешно работают: ``` GET /api/v2/hosts GET /api/v2/hosts/:id ``` а также страница Host в Web UI.
Дальнейшее тестирование показало, что проблема связана с "Deprecate aliasing non-attributes with alias_attribute". https://guides.rubyonrails.org/7_1_release_notes.html#active-record-deprecations