Я создаю собственный объект с помощью java-клиента для Kubernetes API в методе beforeAll интеграционных тестов. После создания настраиваемого объекта создаются и поды. Однако это работает только тогда, когда я устанавливаю Thread.sleep на несколько секунд. Без него объект создается, а затем выполняются все тесты. Я также определил часы для пользовательских статусов объектов, но это тоже не помогает. Есть ли другой способ (кроме Thread.sleep) подержать несколько секунд, пока стручки не будут созданы?
Мой код для создания настраиваемого объекта:
def createWatchCustomObjectsCalls() = {
client.getHttpClient.setReadTimeout(0, TimeUnit.SECONDS)
val watchCalls: Watch[V1Namespace] = Watch.createWatch(client,
apiInstance.listNamespacedCustomObjectCall(crdGroup, crdVersion, crdNamespace, crdPlural, "true", null, null, true,null, null),
new TypeToken[Watch.Response[V1Namespace]]{}.getType)
watchCalls
}
override def beforeAll(): Unit = {
val creationResourcePath = Source.getClass.getResource("/" + httpServerScriptName).getPath
val serverStartupProcessBuilder = Seq("sh", creationResourcePath, "&") #> Console.out
serverStartupProcessBuilder.run()
val body = convertYamlToJson()
val sparkAppCreation = apiInstance.createNamespacedCustomObject(crdGroup, crdVersion, crdNamespace, crdPlural, body,"true")
println(sparkAppCreation)
}
Вы можете синхронно проверить в цикле while, были ли созданы поды:
// while
val currentPodList = getCoreV1Api()
.listPodForAllNamespaces(null /* _continue */,
null /* fieldSelector */,
null /* includeUninitialized */,
null /* labelSelector */,
null /* limit */,
"false" /* pretty */,
null /* resourceVersion */,
null /* timeoutSeconds */,
false /* watch */)
.getItems();
// check items from currentPodList
// end while