io.fabric8.kubernetes.client.KubernetesClientException: Failure executing: POST at: https://api.eapqe-005-msb0.dynamic.xpaas:6443/apis/rbac.authorization.k8s.io/v1/namespaces/73-master/rolebindings. Message: rolebindings.rbac.authorization.k8s.io "system:image-puller" already exists. Received status: Status(apiVersion=v1, code=409, details=StatusDetails(causes=[], group=rbac.authorization.k8s.io, kind=rolebindings, name=system:image-puller, retryAfterSeconds=null, uid=null, additionalProperties={}), kind=Status, message=rolebindings.rbac.authorization.k8s.io "system:image-puller" already exists, metadata=ListMeta(_continue=null, remainingItemCount=null, resourceVersion=null, selfLink=null, additionalProperties={}), reason=AlreadyExists, status=Failure, additionalProperties={}).
at io.fabric8.kubernetes.client.dsl.base.OperationSupport.requestFailure(OperationSupport.java:568)
at io.fabric8.kubernetes.client.dsl.base.OperationSupport.assertResponseCode(OperationSupport.java:507)
at io.fabric8.kubernetes.client.dsl.base.OperationSupport.handleResponse(OperationSupport.java:471)
at io.fabric8.kubernetes.client.dsl.base.OperationSupport.handleResponse(OperationSupport.java:430)
at io.fabric8.kubernetes.client.dsl.base.OperationSupport.handleCreate(OperationSupport.java:251)
at io.fabric8.kubernetes.client.dsl.base.BaseOperation.handleCreate(BaseOperation.java:802)
at io.fabric8.kubernetes.client.dsl.base.BaseOperation.create(BaseOperation.java:322)
at io.fabric8.kubernetes.client.dsl.base.BaseOperation.create(BaseOperation.java:318)
at cz.xtf.core.openshift.OpenShift.createRoleBinding(OpenShift.java:821)
at cz.xtf.core.openshift.OpenShift.getOrCreateRoleBinding(OpenShift.java:923)
at cz.xtf.core.openshift.OpenShift.addRoleToGroup(OpenShift.java:900)
at cz.xtf.core.bm.BuildManager.<init>(BuildManager.java:24)
at cz.xtf.core.bm.BuildManagers.get(BuildManagers.java:23)
at cz.xtf.junit5.listeners.ManagedBuildPrebuilder.testPlanExecutionStarted(ManagedBuildPrebuilder.java:70)
at org.junit.platform.launcher.core.TestExecutionListenerRegistry$CompositeTestExecutionListener.lambda$testPlanExecutionStarted$6(TestExecutionListenerRegistry.java:97)
at java.util.ArrayList.forEach(ArrayList.java:1257)
at org.junit.platform.launcher.core.TestExecutionListenerRegistry.notifyTestExecutionListeners(TestExecutionListenerRegistry.java:59)
at org.junit.platform.launcher.core.TestExecutionListenerRegistry.access$100(TestExecutionListenerRegistry.java:28)
at org.junit.platform.launcher.core.TestExecutionListenerRegistry$CompositeTestExecutionListener.testPlanExecutionStarted(TestExecutionListenerRegistry.java:97)
at org.junit.platform.launcher.core.DefaultLauncher.lambda$execute$6(DefaultLauncher.java:183)
at org.junit.platform.launcher.core.DefaultLauncher.withInterceptedStreams(DefaultLauncher.java:202)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:181)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:128)
at org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.invokeAllTests(JUnitPlatformProvider.java:150)
at org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.invoke(JUnitPlatformProvider.java:124)
at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:384)
at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:345)
at org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:126)
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:418)
Note that happens if there is used the same xtf.bm.namespace=xtf-builds namespace across the runs and when xtf.bm.namespace is created for the first time.
Solution can be to ignore AlreadyExists exception.
In case that there are started multiple runs of test suite (in parallel) there is race in: https://github.com/xtf-cz/xtf/blob/master/core/src/main/java/cz/xtf/core/bm/BuildManager.java#L24
which results in:
Note that happens if there is used the same
xtf.bm.namespace=xtf-builds
namespace across the runs and whenxtf.bm.namespace
is created for the first time.Solution can be to ignore
AlreadyExists
exception.