Оператор Quarkus K8S — выполнение NoSuchField при выполнении тестов

#java #kubernetes #quarkus

Вопрос:

Когда я запускаю тесты для своего оператора K8S с помощью оператора quarkus, я получаю следующую трассировку стека:

 2021-10-29 18:14:08,668 WARN [io.qua.ope.dep.OperatorSDKProcessor] (build-33) Use of deprecated check-crd-and-validate-local-model property. Use crd.validate instead.  java.lang.RuntimeException: java.lang.RuntimeException: io.quarkus.builder.BuildException: Build failure: Build failed due to errors  [error]: Build step io.quarkiverse.operatorsdk.deployment.OperatorSDKProcessor#createConfigurationServiceAndOperator threw an exception: java.lang.NoSuchFieldError: _visitables  at io.sundr.model.ClassRefFluentImpl.withArguments(ClassRefFluentImpl.java:318)  at io.sundr.adapter.reflect.TypeToTypeRef.apply(TypeToTypeRef.java:114)  at io.sundr.adapter.reflect.TypeToTypeRef.apply(TypeToTypeRef.java:76)  at io.sundr.adapter.reflect.TypeToTypeRef.apply(TypeToTypeRef.java:41)  at io.sundr.adapter.reflect.ClassToTypeDef.apply(ClassToTypeDef.java:92)  at io.sundr.adapter.reflect.ClassToTypeDef.apply(ClassToTypeDef.java:55)  at io.sundr.adapter.api.Adapter.adaptType(Adapter.java:38)  at io.sundr.adapter.api.Adapters.lambda$adaptType$0(Adapters.java:35)  at java.base/java.util.Optional.map(Optional.java:265)  at io.sundr.adapter.api.Adapters.adaptType(Adapters.java:35)  at io.fabric8.crd.generator.utils.Types.typeDefFrom(Types.java:53)  at io.fabric8.crd.generator.CustomResourceInfo.fromClass(CustomResourceInfo.java:137)  at io.quarkiverse.operatorsdk.deployment.OperatorSDKProcessor.createControllerConfiguration(OperatorSDKProcessor.java:281)  at io.quarkiverse.operatorsdk.deployment.OperatorSDKProcessor.lambda$createConfigurationServiceAndOperator$0(OperatorSDKProcessor.java:133)  at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)  at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:177)  at java.base/java.util.HashMap$KeySpliterator.forEachRemaining(HashMap.java:1603)  at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)  at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)  at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913)  at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)  at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578)  at io.quarkiverse.operatorsdk.deployment.OperatorSDKProcessor.createConfigurationServiceAndOperator(OperatorSDKProcessor.java:137)  at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)  at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)  at java.base/java.lang.reflect.Method.invoke(Method.java:566)  at io.quarkus.deployment.ExtensionLoader$2.execute(ExtensionLoader.java:820)  at io.quarkus.builder.BuildContext.run(BuildContext.java:277)  at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)  at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2449)  at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1478)  at java.base/java.lang.Thread.run(Thread.java:829)  at org.jboss.threads.JBossThread.run(JBossThread.java:501) ...  

Я действительно не знаю, где искать решение этой проблемы.

Когда я запускаю оператор как автономный, он работает нормально, проблема возникает только при выполнении тестов.

Комментарии:

1. Репост «ответа» @Christophe Лапруна в качестве комментария: Какую версию расширения вы используете? Можете ли вы опубликовать результат запуска расширения, где он выводит версию расширения / версию fabric8 / версию sdk оператора, пожалуйста?

2. Это больше похоже на ошибку, чем на вопрос — не могли бы вы, пожалуйста, открыть проблему?

3. Версия sdk оператора quarkus: 1.9.4, kubernetes-клиент: 5.3.0 Я не на работе, поэтому у меня нет полного журнала, я отредактирую свой пост во вторник @MaxRydahlAndersen: конечно, я сделаю это и во вторник на github, когда смогу опубликовать полную информацию. У меня также есть другое исключение NoSuchFieldException, но с TYPEDEF вместо переменных. Просто интересно, может ли это быть из-за структуры моего проекта: у меня есть 3 оператора, каждый в разных проектах, и у меня есть зависимости между 2 из них (не циркуляры), хотя я не понимаю, почему это повлияет только на тесты

Ответ №1:

Похоже, вы используете слишком старую версию клиента fabric8. Вы используете fabric8 5.3.0, в то время как quarkus-operator-sdk версии 1.9.4 использует fabric8 5.4.0. Использование той же версии клиента fabric8 должно решить вашу проблему.

Комментарии:

1. Я обновил обе свои версии, но проблема была не в этом, проблема заключалась в том, что в моей среде IDE я использовал неправильную версию maven (в комплекте с версией v3.6.3 вместо той, которую я использую в версии v3.8.1)

Ответ №2:

Проблема возникла из-за моей версии maven: я использовал mvn в комплекте с моей IDE в версии v3.6.3 вместо того, который я использую во всей системе v3.8.1.

Очень странно то, что у меня была та же ошибка при запуске mvn clean install с терминала (поэтому я использовал версию v3.8.1)

Во всяком случае, сейчас это работает.

Комментарии:

1. Наконец, я понял настоящую причину сбоя, и это был макет сервера kubernetes из fabric8 в версии 4.10.3, который вызвал проблему.