astonishing-guitar-79208
05/04/2022, 9:10 AMdatahub-frontend JaaS authentication with Kerberos. I'm providing a custom jaas.conf file via k8s configmap, volume mounted in the container at the path specified here - https://datahubproject.io/docs/how/auth/jaas#custom-jaas-configuration. But no matter what jaas.conf file I provide (even the default one with PropertyFileLoginModule) the app fails to boot up with an error that doesn't help much debug the issue. Full error in the thread.astonishing-guitar-79208
05/04/2022, 9:11 AMOops, cannot start the server.
com.google.inject.CreationException: Unable to create injector, see the following errors:
1) No implementation for com.linkedin.entity.client.EntityClient was bound.
while locating com.linkedin.entity.client.EntityClient
for the 3rd parameter of controllers.SsoCallbackController.<init>(SsoCallbackController.java:39)
while locating controllers.SsoCallbackController
for the 4th parameter of router.Routes.<init>(Routes.scala:45)
at play.api.inject.RoutesProvider$.bindingsFromConfiguration(BuiltinModule.scala:121):
Binding(class router.Routes to self) (via modules: com.google.inject.util.Modules$OverrideModule -> play.api.inject.guice.GuiceableModuleConversions$$anon$1)
2) Could not find a suitable constructor in client.AuthServiceClient. Classes must have either one (and only one) constructor annotated with @Inject or a zero-argument constructor that is not private.
at client.AuthServiceClient.class(AuthServiceClient.java:22)
while locating client.AuthServiceClient
for field at controllers.AuthenticationController._authClient(AuthenticationController.java:45)
while locating controllers.AuthenticationController
for the 3rd parameter of router.Routes.<init>(Routes.scala:45)
at play.api.inject.RoutesProvider$.bindingsFromConfiguration(BuiltinModule.scala:121):
Binding(class router.Routes to self) (via modules: com.google.inject.util.Modules$OverrideModule -> play.api.inject.guice.GuiceableModuleConversions$$anon$1)
3) Could not find a suitable constructor in client.AuthServiceClient. Classes must have either one (and only one) constructor annotated with @Inject or a zero-argument constructor that is not private.
at client.AuthServiceClient.class(AuthServiceClient.java:22)
while locating client.AuthServiceClient
for the 4th parameter of controllers.SsoCallbackController.<init>(SsoCallbackController.java:39)
while locating controllers.SsoCallbackController
for the 4th parameter of router.Routes.<init>(Routes.scala:45)
at play.api.inject.RoutesProvider$.bindingsFromConfiguration(BuiltinModule.scala:121):
Binding(class router.Routes to self) (via modules: com.google.inject.util.Modules$OverrideModule -> play.api.inject.guice.GuiceableModuleConversions$$anon$1)
4) Could not find a suitable constructor in com.datahub.authentication.Authentication. Classes must have either one (and only one) constructor annotated with @Inject or a zero-argument constructor that is not private.
at com.datahub.authentication.Authentication.class(Authentication.java:21)
while locating com.datahub.authentication.Authentication
for the 2nd parameter of controllers.SsoCallbackController.<init>(SsoCallbackController.java:39)
while locating controllers.SsoCallbackController
for the 4th parameter of router.Routes.<init>(Routes.scala:45)
at play.api.inject.RoutesProvider$.bindingsFromConfiguration(BuiltinModule.scala:121):
Binding(class router.Routes to self) (via modules: com.google.inject.util.Modules$OverrideModule -> play.api.inject.guice.GuiceableModuleConversions$$anon$1)
5) No implementation for org.pac4j.core.context.session.SessionStore was bound.
while locating org.pac4j.core.context.session.SessionStore
for field at controllers.AuthenticationController._playSessionStore(AuthenticationController.java:45)
while locating controllers.AuthenticationController
for the 3rd parameter of router.Routes.<init>(Routes.scala:45)
at play.api.inject.RoutesProvider$.bindingsFromConfiguration(BuiltinModule.scala:121):
Binding(class router.Routes to self) (via modules: com.google.inject.util.Modules$OverrideModule -> play.api.inject.guice.GuiceableModuleConversions$$anon$1)
6) No implementation for org.pac4j.play.store.PlaySessionStore was bound.
while locating org.pac4j.play.store.PlaySessionStore
for field at org.pac4j.play.LogoutController.playSessionStore(LogoutController.java:28)
while locating controllers.CentralLogoutController
for the 5th parameter of router.Routes.<init>(Routes.scala:45)
at play.api.inject.RoutesProvider$.bindingsFromConfiguration(BuiltinModule.scala:121):
Binding(class router.Routes to self) (via modules: com.google.inject.util.Modules$OverrideModule -> play.api.inject.guice.GuiceableModuleConversions$$anon$1)
6 errors
at com.google.inject.internal.Errors.throwCreationExceptionIfErrorsExist(Errors.java:543)
at com.google.inject.internal.InternalInjectorCreator.initializeStatically(InternalInjectorCreator.java:159)
at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:106)
at com.google.inject.Guice.createInjector(Guice.java:87)
at com.google.inject.Guice.createInjector(Guice.java:78)
at play.api.inject.guice.GuiceBuilder.injector(GuiceInjectorBuilder.scala:185)
at play.api.inject.guice.GuiceApplicationBuilder.build(GuiceApplicationBuilder.scala:137)
at play.api.inject.guice.GuiceApplicationLoader.load(GuiceApplicationLoader.scala:21)
at play.core.server.ProdServerStart$.start(ProdServerStart.scala:51)
at play.core.server.ProdServerStart$.main(ProdServerStart.scala:25)
at play.core.server.ProdServerStart.main(ProdServerStart.scala)helpful-optician-78938
05/04/2022, 6:33 PMastonishing-guitar-79208
05/05/2022, 6:35 AMdatahub-frontend/conf/ . The mounting behavior in k8s is that it removes all existing files in the location. Faced the same issue when trying to use a custom user.props file as well.astonishing-guitar-79208
05/05/2022, 6:41 AMdatahub-frontend/conf/default/
and all custom go in
datahub-frontend/conf/custom/
The files in custom folder would take precedence over the default ones (if present). With this separated conf structure, we could just volume mount the custom conf files without requiring to build an image ourselves.